Skip to content

Commit

Permalink
Merge pull request #99 from EasyAbp/remove-file-reupload-apis
Browse files Browse the repository at this point in the history
Remove file re-upload APIs
  • Loading branch information
gdlcf88 committed Oct 14, 2023
2 parents fb9c3cf + 1b1ae5e commit b6c317a
Show file tree
Hide file tree
Showing 28 changed files with 119 additions and 439 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@ public interface IFileAppService :

Task<CreateManyFileOutput> CreateManyWithStreamAsync(CreateManyFileWithStreamInput input);

Task<FileInfoDto> UpdateAsync(Guid id, UpdateFileInput input);

Task<FileInfoDto> UpdateWithStreamAsync(Guid id, UpdateFileWithStreamInput input);

Task<FileInfoDto> MoveAsync(Guid id, MoveFileInput input);

Task DeleteAsync(Guid id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,15 @@ public virtual async Task<CreateFileOutput> CreateAsync(CreateFileInput input)
{
var fileName = ProcessInputFileName(false, input.FileName);

var parent = await TryGetEntityByNullableIdAsync(input.ParentId);

await AuthorizationService.CheckAsync(
new FileOperationInfoModel(input.ParentId, input.FileContainerName, fileName, input.MimeType,
input.FileType, input.Content?.LongLength, input.OwnerUserId, null),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Create });

var model = new CreateFileModel(input.FileContainerName,
input.OwnerUserId, fileName.Trim(), input.MimeType, input.FileType, input.ParentId, input.Content);
var model = new CreateFileModel(input.FileContainerName, input.OwnerUserId, fileName.Trim(), input.MimeType,
input.FileType, parent, input.Content);

input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);

Expand All @@ -109,13 +111,15 @@ public virtual async Task<CreateFileOutput> CreateWithStreamAsync(CreateFileWith
{
var fileName = ProcessInputFileName(input.GenerateUniqueFileName, input.Content.FileName);

var parent = await TryGetEntityByNullableIdAsync(input.ParentId);

await AuthorizationService.CheckAsync(new FileOperationInfoModel(input.ParentId, input.FileContainerName,
fileName, input.Content.ContentType, FileType.RegularFile, input.Content.ContentLength,
input.OwnerUserId, null),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Create });

var model = new CreateFileWithStreamModel(input.FileContainerName, input.OwnerUserId, fileName,
input.Content.ContentType, FileType.RegularFile, input.ParentId, input.Content.GetStream());
input.Content.ContentType, FileType.RegularFile, parent, input.Content.GetStream());

input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);

Expand Down Expand Up @@ -153,10 +157,15 @@ public virtual async Task DeleteAsync(Guid id)
public virtual async Task<CreateManyFileOutput> CreateManyAsync(CreateManyFileInput input)
{
var fileNames = new Dictionary<CreateFileInput, string>();
var parents = new Dictionary<Guid, File>();

foreach (var fileInfo in input.FileInfos)
{
fileNames[fileInfo] = ProcessInputFileName(false, fileInfo.FileName);
if (fileInfo.ParentId != null)
{
parents[fileInfo.ParentId.Value] ??= await TryGetEntityByNullableIdAsync(fileInfo.ParentId.Value);
}

await AuthorizationService.CheckAsync(
new FileOperationInfoModel(fileInfo.ParentId, fileInfo.FileContainerName, fileNames[fileInfo],
Expand All @@ -168,7 +177,7 @@ public virtual async Task<CreateManyFileOutput> CreateManyAsync(CreateManyFileIn

foreach (var model in input.FileInfos.Select(fileInfo => new CreateFileModel(fileInfo.FileContainerName,
fileInfo.OwnerUserId, fileNames[fileInfo], fileInfo.MimeType, fileInfo.FileType,
fileInfo.ParentId, fileInfo.Content)))
fileInfo.ParentId.HasValue ? parents[fileInfo.ParentId.Value] : null, fileInfo.Content)))
{
input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);
models.Add(model);
Expand All @@ -188,6 +197,7 @@ public virtual async Task<CreateManyFileOutput> CreateManyAsync(CreateManyFileIn

public virtual async Task<CreateManyFileOutput> CreateManyWithStreamAsync(CreateManyFileWithStreamInput input)
{
var parent = await TryGetEntityByNullableIdAsync(input.ParentId);
var fileNames = new Dictionary<IRemoteStreamContent, string>();

foreach (var fileInfo in input.FileContents)
Expand All @@ -204,7 +214,7 @@ public virtual async Task<CreateManyFileOutput> CreateManyWithStreamAsync(Create

foreach (var model in input.FileContents.Select(fileInfo => new CreateFileWithStreamModel(
input.FileContainerName, input.OwnerUserId, fileNames[fileInfo], fileInfo.ContentType,
FileType.RegularFile, input.ParentId, fileInfo.GetStream())))
FileType.RegularFile, parent, fileInfo.GetStream())))
{
input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);
models.Add(model);
Expand Down Expand Up @@ -232,24 +242,17 @@ protected virtual string ProcessInputFileName(bool generateUniqueFileName, [CanB
[Authorize]
public virtual async Task<FileInfoDto> MoveAsync(Guid id, MoveFileInput input)
{
var newFileName = input.NewFileName;

var file = await GetEntityByIdAsync(id);
var newParent = await TryGetEntityByNullableIdAsync(input.NewParentId);

await AuthorizationService.CheckAsync(
new FileOperationInfoModel(input.NewParentId, file.FileContainerName, input.NewFileName, file.MimeType,
file.FileType, file.ByteSize, file.OwnerUserId, file),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Move });

var oldParent = await TryGetEntityByNullableIdAsync(file.ParentId);

var newParent = input.NewParentId == file.ParentId
? oldParent
: await TryGetEntityByNullableIdAsync(input.NewParentId);

input.MapExtraPropertiesTo(file);

await _fileManager.UpdateAsync(file, newFileName, oldParent, newParent);
await _fileManager.MoveAsync(file, new MoveFileModel(newParent, input.NewFileName, file.MimeType));

return await MapToGetOutputDtoAsync(file);
}
Expand Down Expand Up @@ -313,49 +316,6 @@ protected virtual string GetDownloadLimitCacheItemKey()
return CurrentUser.GetId().ToString();
}

[Authorize]
public virtual async Task<FileInfoDto> UpdateAsync(Guid id, UpdateFileInput input)
{
var file = await GetEntityByIdAsync(id);

var fileName = ProcessInputFileName(false, input.FileName);

await AuthorizationService.CheckAsync(
new FileOperationInfoModel(file.ParentId, file.FileContainerName, fileName, input.MimeType,
file.FileType, input.Content?.LongLength, file.OwnerUserId, file),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Update });

var model = new UpdateFileModel(fileName, input.MimeType, file.ParentId, file.ParentId, input.Content);

input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);

await _fileManager.UpdateAsync(file, model);

return await MapToGetOutputDtoAsync(file);
}

[Authorize]
public virtual async Task<FileInfoDto> UpdateWithStreamAsync(Guid id, UpdateFileWithStreamInput input)
{
var file = await GetEntityByIdAsync(id);

var fileName = ProcessInputFileName(false, input.Content.FileName);

await AuthorizationService.CheckAsync(
new FileOperationInfoModel(file.ParentId, file.FileContainerName, fileName, input.Content.ContentType,
file.FileType, input.Content.ContentLength, file.OwnerUserId, file),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Update });

var model = new UpdateFileWithStreamModel(fileName, input.Content.ContentType, file.ParentId, file.ParentId,
input.Content.GetStream());

input.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.Source);

await _fileManager.UpdateAsync(file, model);

return await MapToGetOutputDtoAsync(file);
}

[Authorize]
public virtual async Task<FileInfoDto> UpdateInfoAsync(Guid id, UpdateFileInfoInput input)
{
Expand All @@ -367,11 +327,9 @@ public virtual async Task<FileInfoDto> UpdateInfoAsync(Guid id, UpdateFileInfoIn
fileName, file.MimeType, file.FileType, file.ByteSize, file.OwnerUserId, file),
new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Update });

var parent = await TryGetEntityByNullableIdAsync(file.ParentId);

input.MapExtraPropertiesTo(file);

await _fileManager.UpdateAsync(file, fileName, parent, parent);
await _fileManager.UpdateInfoAsync(file, new UpdateFileInfoModel(fileName, file.MimeType));

return await MapToGetOutputDtoAsync(file);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class CreateFileModel : ExtensibleObject

public FileType FileType { get; set; }

public Guid? ParentId { get; set; }
[CanBeNull]
public File Parent { get; set; }

public byte[] FileContent { get; set; }

Expand All @@ -28,14 +29,14 @@ public CreateFileModel()
}

public CreateFileModel([NotNull] string fileContainerName, Guid? ownerUserId, [NotNull] string fileName,
[CanBeNull] string mimeType, FileType fileType, Guid? parentId, byte[] fileContent)
[CanBeNull] string mimeType, FileType fileType, [CanBeNull] File parent, byte[] fileContent)
{
FileContainerName = fileContainerName;
OwnerUserId = ownerUserId;
FileName = fileName;
MimeType = mimeType;
FileType = fileType;
ParentId = parentId;
Parent = parent;
FileContent = fileContent;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public class CreateFileWithStreamModel : ExtensibleObject

public FileType FileType { get; set; }

public Guid? ParentId { get; set; }
[CanBeNull]
public File Parent { get; set; }

public Stream Stream { get; set; }

Expand All @@ -31,20 +32,20 @@ public CreateFileWithStreamModel()
}

public CreateFileWithStreamModel([NotNull] string fileContainerName, Guid? ownerUserId, [NotNull] string fileName,
[CanBeNull] string mimeType, FileType fileType, Guid? parentId, Stream stream)
[CanBeNull] string mimeType, FileType fileType, [CanBeNull] File parent, Stream stream)
{
FileContainerName = fileContainerName;
OwnerUserId = ownerUserId;
FileName = fileName;
MimeType = mimeType;
FileType = fileType;
ParentId = parentId;
Parent = parent;
Stream = stream;
}

public async Task<CreateFileModel> ToCreateFileModelAsync(CancellationToken cancellationToken = default)
{
var model = new CreateFileModel(FileContainerName, OwnerUserId, FileName, MimeType, FileType, ParentId,
var model = new CreateFileModel(FileContainerName, OwnerUserId, FileName, MimeType, FileType, Parent,
await Stream.GetAllBytesAsync(cancellationToken));

this.MapExtraPropertiesTo(model, MappingPropertyDefinitionChecks.None);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,14 @@ protected File()
long byteSize,
[CanBeNull] string hash,
[CanBeNull] string blobName,
[CanBeNull] File oldParent,
[CanBeNull] File newParent)
[CanBeNull] File parent)
{
if (newParent != null && newParent.FileContainerName != FileContainerName)
if (parent != null && parent.FileContainerName != FileContainerName)
{
throw new UnexpectedFileContainerNameException(newParent.FileContainerName, FileContainerName);
throw new UnexpectedFileContainerNameException(parent.FileContainerName, FileContainerName);
}

ParentId = newParent?.Id;
ParentId = parent?.Id;
FileName = fileName;
MimeType = mimeType;
SubFilesQuantity = subFilesQuantity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,10 @@ public abstract class FileManagerBase : DomainService, IFileManager
public abstract Task<List<File>> CreateManyAsync(List<CreateFileWithStreamModel> models,
CancellationToken cancellationToken = default);

public abstract Task<File> UpdateAsync(File file, string newFileName, File oldParent, File newParent,
public abstract Task<File> UpdateInfoAsync(File file, UpdateFileInfoModel model,
CancellationToken cancellationToken = default);

public abstract Task<File> UpdateAsync(File file, UpdateFileModel model,
CancellationToken cancellationToken = default);

public abstract Task<File> UpdateAsync(File file, UpdateFileWithStreamModel model,
CancellationToken cancellationToken = default);
public abstract Task<File> MoveAsync(File file, MoveFileModel model, CancellationToken cancellationToken = default);

public abstract Task DeleteAsync(File file, CancellationToken cancellationToken = default);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,9 @@ public interface IFileManager : IDomainService
Task<List<File>> CreateManyAsync(List<CreateFileWithStreamModel> models,
CancellationToken cancellationToken = default);

Task<File> UpdateAsync(File file, [NotNull] string newFileName, [CanBeNull] File oldParent,
[CanBeNull] File newParent, CancellationToken cancellationToken = default);
Task<File> UpdateInfoAsync(File file, UpdateFileInfoModel model, CancellationToken cancellationToken = default);

Task<File> UpdateAsync(File file, UpdateFileModel model, CancellationToken cancellationToken = default);

Task<File> UpdateAsync(File file, UpdateFileWithStreamModel model,
CancellationToken cancellationToken = default);
Task<File> MoveAsync(File file, MoveFileModel model, CancellationToken cancellationToken = default);

Task DeleteAsync(File file, CancellationToken cancellationToken = default);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using JetBrains.Annotations;

namespace EasyAbp.FileManagement.Files;

public class MoveFileModel : UpdateFileInfoModel
{
[CanBeNull]
public File NewParent { get; set; }

public MoveFileModel()
{
}

public MoveFileModel([CanBeNull] File newParent, [NotNull] string newFileName,
[CanBeNull] string newMimeType) : base(newFileName, newMimeType)
{
NewParent = newParent;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using JetBrains.Annotations;
using Volo.Abp.ObjectExtending;

namespace EasyAbp.FileManagement.Files;

public class UpdateFileInfoModel : ExtensibleObject
{
[NotNull]
public string NewFileName { get; set; }

[CanBeNull]
public string NewMimeType { get; set; }

public UpdateFileInfoModel()
{
}

public UpdateFileInfoModel([NotNull] string newFileName, [CanBeNull] string newMimeType)
{
NewFileName = newFileName;
NewMimeType = newMimeType;
}
}

This file was deleted.

0 comments on commit b6c317a

Please sign in to comment.