pull/8409/merge
New Future 2025-09-14 13:07:06 -07:00 committed by GitHub
commit 31f76b0d68
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 0 deletions

1
alist-web Submodule

@ -0,0 +1 @@
Subproject commit f72324a29d8a193be6c522f73fc9c168e450260c

View File

@ -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 != "" {
// convert 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(),