fix: Fixed the mechanism to put/get object content-type, content-encoding in azure

This commit is contained in:
jonaustin09
2024-09-11 15:11:37 -04:00
parent 5b6f806829
commit 47d1a799f6
4 changed files with 20 additions and 13 deletions
+12 -7
View File
@@ -67,8 +67,6 @@ const (
onameAttr key = "Objname"
onameAttrLower key = "objname"
metaTmpMultipartPrefix key = ".sgwtmp" + "/multipart"
defaultContentType = "binary/octet-stream"
)
func (key) Table() map[string]struct{} {
@@ -301,10 +299,15 @@ func (az *Azure) PutObject(ctx context.Context, po *s3.PutObjectInput) (string,
opts.HTTPHeaders.BlobContentEncoding = po.ContentEncoding
opts.HTTPHeaders.BlobContentLanguage = po.ContentLanguage
opts.HTTPHeaders.BlobContentDisposition = po.ContentDisposition
opts.HTTPHeaders.BlobContentType = po.ContentType
if strings.HasSuffix(*po.Key, "/") {
// Hardcode "application/x-directory" for direcoty objects
opts.HTTPHeaders.BlobContentType = backend.GetStringPtr(backend.DirContentType)
} else {
opts.HTTPHeaders.BlobContentType = po.ContentType
}
if opts.HTTPHeaders.BlobContentType == nil {
opts.HTTPHeaders.BlobContentType = backend.GetStringPtr(string(defaultContentType))
opts.HTTPHeaders.BlobContentType = backend.GetStringPtr(backend.DefaultContentType)
}
uploadResp, err := az.client.UploadStream(ctx, *po.Bucket, *po.Key, po.Body, opts)
@@ -401,7 +404,7 @@ func (az *Azure) GetObject(ctx context.Context, input *s3.GetObjectInput) (*s3.G
contentType := blobDownloadResponse.ContentType
if contentType == nil {
contentType = backend.GetStringPtr(defaultContentType)
contentType = backend.GetStringPtr(backend.DefaultContentType)
}
return &s3.GetObjectOutput{
@@ -855,7 +858,8 @@ func (az *Azure) CreateMultipartUpload(ctx context.Context, input *s3.CreateMult
}
if getString(input.ContentType) != "" {
opts.HTTPHeaders = &blob.HTTPHeaders{
BlobContentType: input.ContentType,
BlobContentType: input.ContentType,
BlobContentEncoding: input.ContentEncoding,
}
}
@@ -1190,7 +1194,8 @@ func (az *Azure) CompleteMultipartUpload(ctx context.Context, input *s3.Complete
Tags: parseAzTags(tags.BlobTagSet),
}
opts.HTTPHeaders = &blob.HTTPHeaders{
BlobContentType: props.ContentType,
BlobContentType: props.ContentType,
BlobContentEncoding: props.ContentEncoding,
}
resp, err := client.CommitBlockList(ctx, blockIds, opts)
+6
View File
@@ -30,6 +30,12 @@ import (
"github.com/versity/versitygw/s3response"
)
const (
// this is the media type for directories in AWS and Nextcloud
DirContentType = "application/x-directory"
DefaultContentType = "binary/octet-stream"
)
func IsValidBucketName(name string) bool { return true }
type ByBucketName []s3response.ListAllMyBucketsEntry
+2 -5
View File
@@ -86,9 +86,6 @@ const (
objectRetentionKey = "object-retention"
objectLegalHoldKey = "object-legal-hold"
// this is the media type for directories in AWS and Nextcloud
dirContentType = "application/x-directory"
doFalloc = true
skipFalloc = false
)
@@ -1739,7 +1736,7 @@ func (p *Posix) GetObject(_ context.Context, input *s3.GetObjectInput) (*s3.GetO
userMetaData := make(map[string]string)
_, contentEncoding := p.loadUserMetaData(bucket, object, userMetaData)
contentType := dirContentType
contentType := backend.DirContentType
b, err := p.meta.RetrieveAttribute(bucket, object, etagkey)
etag := string(b)
@@ -1898,7 +1895,7 @@ func (p *Posix) HeadObject(ctx context.Context, input *s3.HeadObjectInput) (*s3.
contentType, contentEncoding := p.loadUserMetaData(bucket, object, userMetaData)
if fi.IsDir() {
contentType = dirContentType
contentType = backend.DirContentType
}
b, err := p.meta.RetrieveAttribute(bucket, object, etagkey)
-1
View File
@@ -143,7 +143,6 @@ func TestHeadObject(s *S3Conf) {
HeadObject_non_existing_mp(s)
HeadObject_mp_success(s)
HeadObject_non_existing_dir_object(s)
HeadObject_name_too_long(s)
HeadObject_with_contenttype(s)
HeadObject_success(s)
}