241 строка
7.1 KiB
Go
241 строка
7.1 KiB
Go
package azblob
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// BlobHTTPHeaders contains read/writeable blob properties.
|
|
type BlobHTTPHeaders struct {
|
|
ContentType string
|
|
ContentMD5 []byte
|
|
ContentEncoding string
|
|
ContentLanguage string
|
|
ContentDisposition string
|
|
CacheControl string
|
|
}
|
|
|
|
// NewHTTPHeaders returns the user-modifiable properties for this blob.
|
|
func (bgpr BlobGetPropertiesResponse) NewHTTPHeaders() BlobHTTPHeaders {
|
|
return BlobHTTPHeaders{
|
|
ContentType: bgpr.ContentType(),
|
|
ContentEncoding: bgpr.ContentEncoding(),
|
|
ContentLanguage: bgpr.ContentLanguage(),
|
|
ContentDisposition: bgpr.ContentDisposition(),
|
|
CacheControl: bgpr.CacheControl(),
|
|
ContentMD5: bgpr.ContentMD5(),
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// NewHTTPHeaders returns the user-modifiable properties for this blob.
|
|
func (dr downloadResponse) NewHTTPHeaders() BlobHTTPHeaders {
|
|
return BlobHTTPHeaders{
|
|
ContentType: dr.ContentType(),
|
|
ContentEncoding: dr.ContentEncoding(),
|
|
ContentLanguage: dr.ContentLanguage(),
|
|
ContentDisposition: dr.ContentDisposition(),
|
|
CacheControl: dr.CacheControl(),
|
|
ContentMD5: dr.ContentMD5(),
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// DownloadResponse wraps AutoRest generated DownloadResponse and helps to provide info for retry.
|
|
type DownloadResponse struct {
|
|
r *downloadResponse
|
|
ctx context.Context
|
|
b BlobURL
|
|
getInfo HTTPGetterInfo
|
|
}
|
|
|
|
// Body constructs new RetryReader stream for reading data. If a connection failes
|
|
// while reading, it will make additional requests to reestablish a connection and
|
|
// continue reading. Specifying a RetryReaderOption's with MaxRetryRequests set to 0
|
|
// (the default), returns the original response body and no retries will be performed.
|
|
func (r *DownloadResponse) Body(o RetryReaderOptions) io.ReadCloser {
|
|
if o.MaxRetryRequests == 0 { // No additional retries
|
|
return r.Response().Body
|
|
}
|
|
return NewRetryReader(r.ctx, r.Response(), r.getInfo, o,
|
|
func(ctx context.Context, getInfo HTTPGetterInfo) (*http.Response, error) {
|
|
resp, err := r.b.Download(ctx, getInfo.Offset, getInfo.Count, BlobAccessConditions{
|
|
ModifiedAccessConditions: ModifiedAccessConditions{IfMatch: getInfo.ETag},
|
|
}, false, o.ClientProvidedKeyOptions)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Response(), err
|
|
},
|
|
)
|
|
}
|
|
|
|
// Response returns the raw HTTP response object.
|
|
func (r DownloadResponse) Response() *http.Response {
|
|
return r.r.Response()
|
|
}
|
|
|
|
// NewHTTPHeaders returns the user-modifiable properties for this blob.
|
|
func (r DownloadResponse) NewHTTPHeaders() BlobHTTPHeaders {
|
|
return r.r.NewHTTPHeaders()
|
|
}
|
|
|
|
// BlobContentMD5 returns the value for header x-ms-blob-content-md5.
|
|
func (r DownloadResponse) BlobContentMD5() []byte {
|
|
return r.r.BlobContentMD5()
|
|
}
|
|
|
|
// ContentMD5 returns the value for header Content-MD5.
|
|
func (r DownloadResponse) ContentMD5() []byte {
|
|
return r.r.ContentMD5()
|
|
}
|
|
|
|
// StatusCode returns the HTTP status code of the response, e.g. 200.
|
|
func (r DownloadResponse) StatusCode() int {
|
|
return r.r.StatusCode()
|
|
}
|
|
|
|
// Status returns the HTTP status message of the response, e.g. "200 OK".
|
|
func (r DownloadResponse) Status() string {
|
|
return r.r.Status()
|
|
}
|
|
|
|
// AcceptRanges returns the value for header Accept-Ranges.
|
|
func (r DownloadResponse) AcceptRanges() string {
|
|
return r.r.AcceptRanges()
|
|
}
|
|
|
|
// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count.
|
|
func (r DownloadResponse) BlobCommittedBlockCount() int32 {
|
|
return r.r.BlobCommittedBlockCount()
|
|
}
|
|
|
|
// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number.
|
|
func (r DownloadResponse) BlobSequenceNumber() int64 {
|
|
return r.r.BlobSequenceNumber()
|
|
}
|
|
|
|
// BlobType returns the value for header x-ms-blob-type.
|
|
func (r DownloadResponse) BlobType() BlobType {
|
|
return r.r.BlobType()
|
|
}
|
|
|
|
// CacheControl returns the value for header Cache-Control.
|
|
func (r DownloadResponse) CacheControl() string {
|
|
return r.r.CacheControl()
|
|
}
|
|
|
|
// ContentDisposition returns the value for header Content-Disposition.
|
|
func (r DownloadResponse) ContentDisposition() string {
|
|
return r.r.ContentDisposition()
|
|
}
|
|
|
|
// ContentEncoding returns the value for header Content-Encoding.
|
|
func (r DownloadResponse) ContentEncoding() string {
|
|
return r.r.ContentEncoding()
|
|
}
|
|
|
|
// ContentLanguage returns the value for header Content-Language.
|
|
func (r DownloadResponse) ContentLanguage() string {
|
|
return r.r.ContentLanguage()
|
|
}
|
|
|
|
// ContentLength returns the value for header Content-Length.
|
|
func (r DownloadResponse) ContentLength() int64 {
|
|
return r.r.ContentLength()
|
|
}
|
|
|
|
// ContentRange returns the value for header Content-Range.
|
|
func (r DownloadResponse) ContentRange() string {
|
|
return r.r.ContentRange()
|
|
}
|
|
|
|
// ContentType returns the value for header Content-Type.
|
|
func (r DownloadResponse) ContentType() string {
|
|
return r.r.ContentType()
|
|
}
|
|
|
|
// CopyCompletionTime returns the value for header x-ms-copy-completion-time.
|
|
func (r DownloadResponse) CopyCompletionTime() time.Time {
|
|
return r.r.CopyCompletionTime()
|
|
}
|
|
|
|
// CopyID returns the value for header x-ms-copy-id.
|
|
func (r DownloadResponse) CopyID() string {
|
|
return r.r.CopyID()
|
|
}
|
|
|
|
// CopyProgress returns the value for header x-ms-copy-progress.
|
|
func (r DownloadResponse) CopyProgress() string {
|
|
return r.r.CopyProgress()
|
|
}
|
|
|
|
// CopySource returns the value for header x-ms-copy-source.
|
|
func (r DownloadResponse) CopySource() string {
|
|
return r.r.CopySource()
|
|
}
|
|
|
|
// CopyStatus returns the value for header x-ms-copy-status.
|
|
func (r DownloadResponse) CopyStatus() CopyStatusType {
|
|
return r.r.CopyStatus()
|
|
}
|
|
|
|
// CopyStatusDescription returns the value for header x-ms-copy-status-description.
|
|
func (r DownloadResponse) CopyStatusDescription() string {
|
|
return r.r.CopyStatusDescription()
|
|
}
|
|
|
|
// Date returns the value for header Date.
|
|
func (r DownloadResponse) Date() time.Time {
|
|
return r.r.Date()
|
|
}
|
|
|
|
// ETag returns the value for header ETag.
|
|
func (r DownloadResponse) ETag() ETag {
|
|
return r.r.ETag()
|
|
}
|
|
|
|
// IsServerEncrypted returns the value for header x-ms-server-encrypted.
|
|
func (r DownloadResponse) IsServerEncrypted() string {
|
|
return r.r.IsServerEncrypted()
|
|
}
|
|
|
|
// LastModified returns the value for header Last-Modified.
|
|
func (r DownloadResponse) LastModified() time.Time {
|
|
return r.r.LastModified()
|
|
}
|
|
|
|
// LeaseDuration returns the value for header x-ms-lease-duration.
|
|
func (r DownloadResponse) LeaseDuration() LeaseDurationType {
|
|
return r.r.LeaseDuration()
|
|
}
|
|
|
|
// LeaseState returns the value for header x-ms-lease-state.
|
|
func (r DownloadResponse) LeaseState() LeaseStateType {
|
|
return r.r.LeaseState()
|
|
}
|
|
|
|
// LeaseStatus returns the value for header x-ms-lease-status.
|
|
func (r DownloadResponse) LeaseStatus() LeaseStatusType {
|
|
return r.r.LeaseStatus()
|
|
}
|
|
|
|
// RequestID returns the value for header x-ms-request-id.
|
|
func (r DownloadResponse) RequestID() string {
|
|
return r.r.RequestID()
|
|
}
|
|
|
|
// Version returns the value for header x-ms-version.
|
|
func (r DownloadResponse) Version() string {
|
|
return r.r.Version()
|
|
}
|
|
|
|
// NewMetadata returns user-defined key/value pairs.
|
|
func (r DownloadResponse) NewMetadata() Metadata {
|
|
return r.r.NewMetadata()
|
|
}
|