mirror of
https://github.com/rclone/rclone.git
synced 2025-02-22 08:03:00 +08:00
azureblob: add --azureblob-no-head-object
This commit is contained in:
parent
f7f4468cbc
commit
05f128868f
@ -233,6 +233,11 @@ This option controls how often unused buffers will be removed from the pool.`,
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Advanced: true,
|
Advanced: true,
|
||||||
|
}, {
|
||||||
|
Name: "no_head_object",
|
||||||
|
Help: `If set, do not do HEAD before GET when getting objects.`,
|
||||||
|
Default: false,
|
||||||
|
Advanced: true,
|
||||||
}},
|
}},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -258,6 +263,7 @@ type Options struct {
|
|||||||
MemoryPoolUseMmap bool `config:"memory_pool_use_mmap"`
|
MemoryPoolUseMmap bool `config:"memory_pool_use_mmap"`
|
||||||
Enc encoder.MultiEncoder `config:"encoding"`
|
Enc encoder.MultiEncoder `config:"encoding"`
|
||||||
PublicAccess string `config:"public_access"`
|
PublicAccess string `config:"public_access"`
|
||||||
|
NoHeadObject bool `config:"no_head_object"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fs represents a remote azure server
|
// Fs represents a remote azure server
|
||||||
@ -756,7 +762,7 @@ func (f *Fs) newObjectWithInfo(remote string, info *azblob.BlobItemInternal) (fs
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else if !o.fs.opt.NoHeadObject {
|
||||||
err := o.readMetaData() // reads info and headers, returning an error
|
err := o.readMetaData() // reads info and headers, returning an error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -1366,6 +1372,24 @@ func (o *Object) decodeMetaDataFromPropertiesResponse(info *azblob.BlobGetProper
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Object) decodeMetaDataFromDownloadResponse(info *azblob.DownloadResponse) (err error) {
|
||||||
|
metadata := info.NewMetadata()
|
||||||
|
size := info.ContentLength()
|
||||||
|
if isDirectoryMarker(size, metadata, o.remote) {
|
||||||
|
return fs.ErrorNotAFile
|
||||||
|
}
|
||||||
|
// NOTE - Client library always returns MD5 as base64 decoded string, Object needs to maintain
|
||||||
|
// this as base64 encoded string.
|
||||||
|
o.md5 = base64.StdEncoding.EncodeToString(info.ContentMD5())
|
||||||
|
o.mimeType = info.ContentType()
|
||||||
|
o.size = size
|
||||||
|
o.modTime = info.LastModified()
|
||||||
|
o.accessTier = o.AccessTier()
|
||||||
|
o.setMetadata(metadata)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (o *Object) decodeMetaDataFromBlob(info *azblob.BlobItemInternal) (err error) {
|
func (o *Object) decodeMetaDataFromBlob(info *azblob.BlobItemInternal) (err error) {
|
||||||
metadata := info.Metadata
|
metadata := info.Metadata
|
||||||
size := *info.Properties.ContentLength
|
size := *info.Properties.ContentLength
|
||||||
@ -1496,6 +1520,10 @@ func (o *Object) Open(ctx context.Context, options ...fs.OpenOption) (in io.Read
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to open for download")
|
return nil, errors.Wrap(err, "failed to open for download")
|
||||||
}
|
}
|
||||||
|
err = o.decodeMetaDataFromDownloadResponse(downloadResponse)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to decode metadata for download")
|
||||||
|
}
|
||||||
in = downloadResponse.Body(azblob.RetryReaderOptions{})
|
in = downloadResponse.Body(azblob.RetryReaderOptions{})
|
||||||
return in, nil
|
return in, nil
|
||||||
}
|
}
|
||||||
|
@ -1251,7 +1251,7 @@ very small even with this flag.
|
|||||||
Advanced: true,
|
Advanced: true,
|
||||||
}, {
|
}, {
|
||||||
Name: "no_head_object",
|
Name: "no_head_object",
|
||||||
Help: `If set, don't HEAD objects`,
|
Help: `If set, do not do HEAD before GET when getting objects.`,
|
||||||
Default: false,
|
Default: false,
|
||||||
Advanced: true,
|
Advanced: true,
|
||||||
}, {
|
}, {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user