From 01104e55b1d0e03715f65f77ed2da2bbc855af08 Mon Sep 17 00:00:00 2001 From: New Future Date: Sat, 19 Apr 2025 19:30:44 +0000 Subject: [PATCH 1/2] feat(azure_blob): update content-type and md5 --- drivers/azure_blob/driver.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/azure_blob/driver.go b/drivers/azure_blob/driver.go index 6836533a..04bef6e7 100644 --- a/drivers/azure_blob/driver.go +++ b/drivers/azure_blob/driver.go @@ -2,6 +2,7 @@ package azure_blob import ( "context" + "encoding/base64" "fmt" "io" "path" @@ -12,11 +13,15 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/sas" "github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/model" + "github.com/alist-org/alist/v3/pkg/utils" + log "github.com/sirupsen/logrus" ) + // Azure Blob Storage based on the blob APIs // Link: https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api type AzureBlob struct { @@ -279,6 +284,27 @@ func (d *AzureBlob) Put(ctx context.Context, dstDir model.Obj, stream model.File // Determine optimal upload options based on file size options := optimizedUploadOptions(stream.GetSize()) + // Set metadata and content type + contentType := stream.GetMimetype() + if contentType == "" { + contentType = "application/octet-stream" // Default content type + } + options.HTTPHeaders = &blob.HTTPHeaders{ + BlobContentType: &contentType, + } + + // Set content MD5 hash if available + base64MD5 := stream.GetHash().GetHash(utils.MD5) + if base64MD5 != "" { + // covert base64 to hex byte + md5, err := base64.StdEncoding.DecodeString(base64MD5) + if err == nil && len(md5) == 16 { + options.HTTPHeaders.BlobContentMD5 = md5 + } else { + log.Warnf("Invalid MD5 hash: %s, error: %v", base64MD5, err) + } + } + // Track upload progress progressTracker := &progressTracker{ total: stream.GetSize(), From 0949b3382e64939899089c9cb75e30cb230167d2 Mon Sep 17 00:00:00 2001 From: New Future Date: Sat, 19 Apr 2025 19:34:56 +0000 Subject: [PATCH 2/2] fix typos --- alist-web | 1 + drivers/azure_blob/driver.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 160000 alist-web diff --git a/alist-web b/alist-web new file mode 160000 index 00000000..f72324a2 --- /dev/null +++ b/alist-web @@ -0,0 +1 @@ +Subproject commit f72324a29d8a193be6c522f73fc9c168e450260c diff --git a/drivers/azure_blob/driver.go b/drivers/azure_blob/driver.go index 04bef6e7..8131894f 100644 --- a/drivers/azure_blob/driver.go +++ b/drivers/azure_blob/driver.go @@ -296,7 +296,7 @@ func (d *AzureBlob) Put(ctx context.Context, dstDir model.Obj, stream model.File // Set content MD5 hash if available base64MD5 := stream.GetHash().GetHash(utils.MD5) if base64MD5 != "" { - // covert base64 to hex byte + // convert base64 to hex byte md5, err := base64.StdEncoding.DecodeString(base64MD5) if err == nil && len(md5) == 16 { options.HTTPHeaders.BlobContentMD5 = md5