public async Task <(bool Success, UploadFileResult Result, string ErrorMessage)> Process(IQueryCollection query, IFormCollection form, IHeaderDictionary headers, Stream fileStream, string extensionName, string localFileName, string sectionName, HttpRequest request) { var(success, errorMsg, fileSignature) = await FileValidator.Validate(localFileName, fileStream); if (!success) { return(false, null, errorMsg); } var subDir = await SubdirectoryGenerator.Generate(query, form, headers, extensionName, request); var folder = Path.Combine(Configure.RootDirectory, subDir); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } var fileName = await FileNameGenerator.Generate(query, form, headers, extensionName, request) + extensionName; var url = Path.Combine(folder, fileName).Replace("\\", "/"); await using var stream = new MemoryStream(); if (fileSignature != null && fileSignature.Length > 0) { stream.Write(fileSignature, 0, fileSignature.Length); } await fileStream.CopyToAsync(stream, Configure.BufferSize); stream.Seek(0, SeekOrigin.Begin); var fileBytes = new byte[stream.Length]; await stream.ReadAsync(fileBytes); var req = new PutObjectRequest(Configure.Bucket, url, fileBytes); var resp = Client.PutObject(req); if (resp.httpCode != 200) { return(false, null, resp.httpMessage); } var serverPath = "/" + url; try { var callback = request.HttpContext.RequestServices.GetService <IUploadCompletedCallbackHandler>(); if (callback != null) { await callback.OnCompletedAsync(serverPath, localFileName, request); } } catch { // ignored } return(true, new UploadFileResult { Name = sectionName, Url = serverPath }, ""); }
public async Task <(bool Success, UploadFileResult Result, string ErrorMessage)> Process(IQueryCollection query, IFormCollection form, IHeaderDictionary headers, Stream fileStream, string extensionName, string localFileName, string sectionName, HttpRequest request) { var(success, errorMsg, fileSignature) = await FileValidator.Validate(localFileName, fileStream); if (!success) { return(false, null, errorMsg); } var subDir = await SubdirectoryGenerator.Generate(query, form, headers, extensionName, request); var folder = Path.Combine(Configure.RootDirectory, subDir); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } var fileName = await FileNameGenerator.Generate(query, form, headers, extensionName, request) + extensionName; var url = Path.Combine(folder, fileName); await using var writeStream = File.Create(url); if (fileSignature != null && fileSignature.Length > 0) { writeStream.Write(fileSignature, 0, fileSignature.Length); } await fileStream.CopyToAsync(writeStream, Configure.BufferSize); var serverFileName = Path.Combine("/", subDir, fileName).Replace("\\", "/"); try { var callback = request.HttpContext.RequestServices.GetService <IUploadCompletedCallbackHandler>(); if (callback != null) { await callback.OnCompletedAsync(serverFileName, localFileName, request); } } catch { // ignored } return(true, new UploadFileResult { Name = sectionName, Url = serverFileName }, ""); }
public async Task <(bool Success, UploadFileResult Result, string ErrorMessage)> Process(IQueryCollection query, IFormCollection form, IHeaderDictionary headers, Stream fileStream, string extensionName, string localFileName, string sectionName, HttpRequest request) { var(success, errorMsg, fileSignature) = await FileValidator.Validate(localFileName, fileStream); if (!success) { return(false, null, errorMsg); } var subDir = await SubdirectoryGenerator.Generate(query, form, headers, extensionName, request); var folder = Path.Combine(Configure.RootDirectory, subDir); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } var fileName = await FileNameGenerator.Generate(query, form, headers, extensionName, request) + extensionName; var url = Path.Combine(folder, fileName).Replace("\\", "/"); await using var stream = new MemoryStream(); if (fileSignature != null && fileSignature.Length > 0) { stream.Write(fileSignature, 0, fileSignature.Length); } await fileStream.CopyToAsync(stream, Configure.BufferSize); stream.Seek(0, SeekOrigin.Begin); if (!Configure.Metadata.TryGetValue(extensionName, out var meta)) { meta = new ObjectMetadata { ContentType = "application/octet-stream" }; } meta.ContentDisposition = meta.ContentDisposition.Resolve(query, form, localFileName, sectionName); if (meta.UserMetadata != null) { foreach (var(key, _) in meta.UserMetadata) { meta.UserMetadata[key] = meta.UserMetadata[key].Resolve(query, form, localFileName, sectionName); } } Client.PutObject(Configure.BucketName, url, stream, meta); var serverPath = "/" + url; try { var callback = request.HttpContext.RequestServices.GetService <IUploadCompletedCallbackHandler>(); if (callback != null) { await callback.OnCompletedAsync(serverPath, localFileName, request); } } catch { // ignored } return(true, new UploadFileResult { Name = sectionName, Url = serverPath }, ""); }