diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
| commit | 3c188c2949af9d0e08db74a850f8a87dad52de49 (patch) | |
| tree | 5dba85786aa9a5a72d91328092a017f16318b8c0 /code/api/Endpoints/Storage/UploadEndpoint.cs | |
| parent | f5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff) | |
| download | storage-3c188c2949af9d0e08db74a850f8a87dad52de49.tar.xz storage-3c188c2949af9d0e08db74a850f8a87dad52de49.zip | |
feat: Yes
Diffstat (limited to 'code/api/Endpoints/Storage/UploadEndpoint.cs')
| -rw-r--r-- | code/api/Endpoints/Storage/UploadEndpoint.cs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/code/api/Endpoints/Storage/UploadEndpoint.cs b/code/api/Endpoints/Storage/UploadEndpoint.cs new file mode 100644 index 0000000..e3feffb --- /dev/null +++ b/code/api/Endpoints/Storage/UploadEndpoint.cs @@ -0,0 +1,61 @@ +using File = I2R.Storage.Api.Database.Models.File; + +namespace I2R.Storage.Api.Endpoints.Storage; + +public class UploadEndpoint : EndpointBase +{ + private readonly DefaultResourceService _resourceService; + private readonly IStringLocalizer<SharedResources> _localizer; + private readonly AppDatabase _database; + private readonly StorageService _storageService; + + public UploadEndpoint(DefaultResourceService resourceService, IStringLocalizer<SharedResources> localizer, AppDatabase database, StorageService storageService) { + _resourceService = resourceService; + _localizer = localizer; + _database = database; + _storageService = storageService; + } + + public class Request + { + public IFormFileCollection FormFileCollection { get; set; } + public Guid FolderId { get; set; } + } + + [HttpPost("~/storage/upload")] + public async Task<ActionResult> Handle(Request request) { + var folder = await _storageService.GetFileSystemEntryAsync(request.FolderId); + if (folder == default) { + return NotFound(); + } + + var problem = new KnownProblemModel(); + foreach (var formFile in request.FormFileCollection) { + if (!formFile.FileName.IsValidFileName()) { + problem.AddError("file_" + formFile.Name, _localizer["{fileName} is an invalid file name"]); + continue; + } + + if (problem.Errors.Any()) { + return KnownProblem(problem); + } + + var file = new File(LoggedInUser.Id) { + Name = formFile.FileName, + FolderId = folder.Id, + MimeType = formFile.ContentType, + SizeInBytes = formFile.Length, + OwningUserId = LoggedInUser.Id + }; + var id = new StorageBlobId() { + Id = file.Id, + Bucket = LoggedInUser.Id + }; + await _resourceService.SetBlobAsync(id, formFile.OpenReadStream()); + await _database.Files.AddAsync(file); + await _database.SaveChangesAsync(); + } + + return Ok(await _storageService.GetFileSystemEntryAsync(folder.Id)); + } +}
\ No newline at end of file |
