diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2024-04-14 22:41:32 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-14 10:41:32 -0700 |
| commit | 33537ae29f09af88f55d2f28a28406d3b8bfacd3 (patch) | |
| tree | 5c0ba5fb6ab26c3b4f8e6a1d153c6c7704186a54 /weed/server/filer_server_handlers_read.go | |
| parent | 8833745fbcb140bfb61710d600c713e1ce50bd6c (diff) | |
| download | seaweedfs-33537ae29f09af88f55d2f28a28406d3b8bfacd3.tar.xz seaweedfs-33537ae29f09af88f55d2f28a28406d3b8bfacd3.zip | |
[s3] fix s3 test_multipart_get_part (#5476)
* try fix s3 test_multipart_get_part
* add passed s3 tests
* fix SeaweedFSUploadId
* rm spaces
* convert part request to range
* add passed s3 tests of multipart
Diffstat (limited to 'weed/server/filer_server_handlers_read.go')
| -rw-r--r-- | weed/server/filer_server_handlers_read.go | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go index 83411051d..123b7a494 100644 --- a/weed/server/filer_server_handlers_read.go +++ b/weed/server/filer_server_handlers_read.go @@ -3,6 +3,8 @@ package weed_server import ( "bytes" "context" + "encoding/base64" + "encoding/hex" "errors" "fmt" "io" @@ -132,7 +134,7 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) return } // inform S3 API this is a user created directory key object - w.Header().Set(s3_constants.X_SeaweedFS_Header_Directory_Key, "true") + w.Header().Set(s3_constants.SeaweedFSIsDirectoryKey, "true") } if isForDirectory && entry.Attr.Mime != s3_constants.FolderMimeType { @@ -158,7 +160,22 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) return } - etag := filer.ETagEntry(entry) + var etag string + if partNumber, errNum := strconv.Atoi(r.Header.Get(s3_constants.SeaweedFSPartNumber)); errNum == nil { + if len(entry.Chunks) < partNumber { + stats.FilerHandlerCounter.WithLabelValues(stats.ErrorReadChunk).Inc() + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte("InvalidPart")) + return + } + w.Header().Set(s3_constants.AmzMpPartsCount, strconv.Itoa(len(entry.Chunks))) + partChunk := entry.GetChunks()[partNumber-1] + md5, _ := base64.StdEncoding.DecodeString(partChunk.ETag) + etag = hex.EncodeToString(md5) + r.Header.Set("Range", fmt.Sprintf("bytes=%d-%d", partChunk.Offset, uint64(partChunk.Offset)+partChunk.Size-1)) + } else { + etag = filer.ETagEntry(entry) + } w.Header().Set("Accept-Ranges", "bytes") // mime type @@ -207,7 +224,6 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) filename := entry.Name() adjustPassthroughHeaders(w, r, filename) - totalSize := int64(entry.Size()) if r.Method == "HEAD" { |
