-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue 92 #95
base: main
Are you sure you want to change the base?
Issue 92 #95
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
…olderName to RenameToFolderName, modifed UploadBlob method and existing tests to cover the TargetFolder field.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -33,6 +33,11 @@ public class AzureBlobStorage | |||||||||||||||||||||||||||||||||||||||||
/// <returns>Object { bool Success, Dictionary<string, string> Data }</returns> | ||||||||||||||||||||||||||||||||||||||||||
public static async Task<Result> UploadBlob([PropertyTab] Source source, [PropertyTab] Destination destination, [PropertyTab] Options options, CancellationToken cancellationToken) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
if (destination.ContainerName.Contains('/') || destination.ContainerName.Contains('\\')) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
throw new Exception("The container name cannot contain '/' or '\\'."); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+36
to
+39
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Use a more specific exception type for container name validation Instead of throwing a general Apply this diff to improve exception handling: - throw new Exception("The container name cannot contain '/' or '\\'.");
+ throw new ArgumentException("The container name cannot contain '/' or '\\'.", nameof(destination.ContainerName)); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var results = new Dictionary<string, string>(); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var fi = string.IsNullOrEmpty(source.SourceFile) ? null : new FileInfo(source.SourceFile); | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -52,8 +57,12 @@ public static async Task<Result> UploadBlob([PropertyTab] Source source, [Proper | |||||||||||||||||||||||||||||||||||||||||
if (fi == null) | ||||||||||||||||||||||||||||||||||||||||||
throw new FileNotFoundException($"Source file '{source.SourceFile}' was empty."); | ||||||||||||||||||||||||||||||||||||||||||
blobName = fi.Name; | ||||||||||||||||||||||||||||||||||||||||||
if (!string.IsNullOrWhiteSpace(source.BlobName) || source.Compress) | ||||||||||||||||||||||||||||||||||||||||||
blobName = RenameFile(!string.IsNullOrWhiteSpace(source.BlobName) ? source.BlobName : fi.Name, source.Compress, fi); | ||||||||||||||||||||||||||||||||||||||||||
if (!string.IsNullOrWhiteSpace(source.RenameToBlobName) || source.Compress) | ||||||||||||||||||||||||||||||||||||||||||
blobName = RenameFile(!string.IsNullOrWhiteSpace(source.RenameToBlobName) ? source.RenameToBlobName : fi.Name, source.Compress, fi); | ||||||||||||||||||||||||||||||||||||||||||
if (!string.IsNullOrWhiteSpace(destination.TargetFolder)) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
blobName = $"{destination.TargetFolder.TrimEnd('/', '\\')}/{blobName}"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
results.Add(source.SourceFile, await HandleUpload(source, destination, options, fi, blobName, cancellationToken)); | ||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||
case UploadSourceType.Directory: | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -66,12 +75,17 @@ public static async Task<Result> UploadBlob([PropertyTab] Source source, [Proper | |||||||||||||||||||||||||||||||||||||||||
fileName = RenameFile(fileName, source.Compress, file); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var parentDirectory = Path.GetFileName(Path.GetDirectoryName(file.ToString())); | ||||||||||||||||||||||||||||||||||||||||||
var withDir = string.IsNullOrWhiteSpace(source.BlobFolderName) | ||||||||||||||||||||||||||||||||||||||||||
var withDir = string.IsNullOrWhiteSpace(source.RenameToFolderName) | ||||||||||||||||||||||||||||||||||||||||||
? Path.Combine(parentDirectory, fileName) | ||||||||||||||||||||||||||||||||||||||||||
: Path.Combine(source.BlobFolderName, fileName); | ||||||||||||||||||||||||||||||||||||||||||
: Path.Combine(source.RenameToFolderName, fileName); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
blobName = withDir.Replace("\\", "/"); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (!string.IsNullOrWhiteSpace(destination.TargetFolder)) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
blobName = $"{destination.TargetFolder.TrimEnd('/', '\\')}/{blobName}"; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
results.Add(file.FullName, await HandleUpload(source, destination, options, file, blobName, cancellationToken)); | ||||||||||||||||||||||||||||||||||||||||||
handledFile = file.FullName; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -121,7 +135,6 @@ public static async Task<Result> UploadBlob([PropertyTab] Source source, [Proper | |||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
private static async Task<string> HandleUpload(Source source, Destination destination, Options options, FileInfo fi, string blobName, CancellationToken cancellationToken) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
blobName = string.IsNullOrWhiteSpace(source.BlobName) ? blobName : source.BlobName; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var contentType = string.IsNullOrWhiteSpace(destination.ContentType) ? MimeUtility.GetMimeMapping(fi.Name) : destination.ContentType; | ||||||||||||||||||||||||||||||||||||||||||
var encoding = GetEncoding(destination.FileEncoding); | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -383,7 +396,16 @@ private static async Task<FileInfo> AppendAny(BlobClient blob, AppendBlobClient | |||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
var tempFile = Path.Combine(Path.GetTempPath(), blobName); | ||||||||||||||||||||||||||||||||||||||||||
string normalizedBlobName = blobName.Replace('/', '\\'); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var tempFile = Path.Combine(Path.GetTempPath(), normalizedBlobName); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
string directoryPath = Path.GetDirectoryName(tempFile); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (!Directory.Exists(directoryPath)) | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
Directory.CreateDirectory(directoryPath); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+399
to
+408
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Validate Using Apply this diff to sanitize - string normalizedBlobName = blobName.Replace('/', '\\');
+ string normalizedBlobName = Path.GetFileName(blobName.Replace('/', '\\')); This change uses 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (blob != null) | ||||||||||||||||||||||||||||||||||||||||||
await blob.DownloadToAsync(tempFile, cancellationToken); | ||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add validation and improve documentation for the TargetFolder property.
While the property implementation is functionally correct, consider these improvements:
Apply this diff to enhance the property:
📝 Committable suggestion