diff options
Diffstat (limited to 'weed/server/filer_server_handlers_read.go')
| -rw-r--r-- | weed/server/filer_server_handlers_read.go | 58 |
1 files changed, 7 insertions, 51 deletions
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go index 1a66dd045..3db936f43 100644 --- a/weed/server/filer_server_handlers_read.go +++ b/weed/server/filer_server_handlers_read.go @@ -2,9 +2,6 @@ package weed_server import ( "context" - "encoding/base64" - "encoding/hex" - "errors" "fmt" "io" "math" @@ -15,12 +12,11 @@ import ( "strings" "time" - "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" - "github.com/seaweedfs/seaweedfs/weed/security" - "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" + "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" + "github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/stats" "github.com/seaweedfs/seaweedfs/weed/util" ) @@ -122,22 +118,8 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) writeJsonQuiet(w, r, http.StatusOK, entry) return } - if entry.Attr.Mime == "" || (entry.Attr.Mime == s3_constants.FolderMimeType && r.Header.Get(s3_constants.AmzIdentityId) == "") { - // Don't return directory meta if config value is set to true - if fs.option.ExposeDirectoryData == false { - writeJsonError(w, r, http.StatusForbidden, errors.New("directory listing is disabled")) - return - } - // return index of directory for non s3 gateway - fs.listDirectoryHandler(w, r) - return - } - // inform S3 API this is a user created directory key object - w.Header().Set(s3_constants.SeaweedFSIsDirectoryKey, "true") - } - - if isForDirectory && entry.Attr.Mime != s3_constants.FolderMimeType { - w.WriteHeader(http.StatusNotFound) + // listDirectoryHandler checks ExposeDirectoryData internally + fs.listDirectoryHandler(w, r) return } @@ -160,22 +142,8 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) return } - 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) - } + // Generate ETag for response + etag := filer.ETagEntry(entry) w.Header().Set("Accept-Ranges", "bytes") // mime type @@ -192,10 +160,9 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) } // print out the header from extended properties + // Filter out xattr-* (filesystem extended attributes) and internal SeaweedFS headers for k, v := range entry.Extended { if !strings.HasPrefix(k, "xattr-") && !s3_constants.IsSeaweedFSInternalHeader(k) { - // "xattr-" prefix is set in filesys.XATTR_PREFIX - // IsSeaweedFSInternalHeader filters internal metadata that should not become HTTP headers w.Header().Set(k, string(v)) } } @@ -210,17 +177,6 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) seaweedHeaders = append(seaweedHeaders, "Content-Disposition") w.Header().Set("Access-Control-Expose-Headers", strings.Join(seaweedHeaders, ",")) - //set tag count - tagCount := 0 - for k := range entry.Extended { - if strings.HasPrefix(k, s3_constants.AmzObjectTagging+"-") { - tagCount++ - } - } - if tagCount > 0 { - w.Header().Set(s3_constants.AmzTagCount, strconv.Itoa(tagCount)) - } - SetEtag(w, etag) filename := entry.Name() |
