Browse Source

avoid reparsing the multipart form

pull/719/head
Chris Lu 7 years ago
parent
commit
4d322df95e
  1. 12
      weed/storage/needle.go
  2. 7
      weed/storage/needle_parse_multipart.go

12
weed/storage/needle.go

@ -29,12 +29,12 @@ type Needle struct {
DataSize uint32 `comment:"Data size"` //version2 DataSize uint32 `comment:"Data size"` //version2
Data []byte `comment:"The actual file data"` Data []byte `comment:"The actual file data"`
Flags byte `comment:"boolean flags"` //version2
NameSize uint8 //version2
Flags byte `comment:"boolean flags"` //version2
NameSize uint8 //version2
Name []byte `comment:"maximum 256 characters"` //version2 Name []byte `comment:"maximum 256 characters"` //version2
MimeSize uint8 //version2
MimeSize uint8 //version2
Mime []byte `comment:"maximum 256 characters"` //version2 Mime []byte `comment:"maximum 256 characters"` //version2
PairsSize uint16 //version2
PairsSize uint16 //version2
Pairs []byte `comment:"additional name value pairs, json format, maximum 64kB"` Pairs []byte `comment:"additional name value pairs, json format, maximum 64kB"`
LastModified uint64 //only store LastModifiedBytesLength bytes, which is 5 bytes to disk LastModified uint64 //only store LastModifiedBytesLength bytes, which is 5 bytes to disk
Ttl *TTL Ttl *TTL
@ -59,10 +59,8 @@ func ParseUpload(r *http.Request) (
} }
} }
isChunkedFile, _ = strconv.ParseBool(r.FormValue("cm"))
if r.Method == "POST" { if r.Method == "POST" {
fileName, data, mimeType, isGzipped, e = parseMultipart(r, isChunkedFile)
fileName, data, mimeType, isGzipped, isChunkedFile, e = parseMultipart(r)
} else { } else {
isGzipped = false isGzipped = false
mimeType = r.Header.Get("Content-Type") mimeType = r.Header.Get("Content-Type")

7
weed/storage/needle_parse_multipart.go

@ -8,10 +8,11 @@ import (
"net/http" "net/http"
"path" "path"
"strings" "strings"
"strconv"
) )
func parseMultipart(r *http.Request, isChunkedFile bool) (
fileName string, data []byte, mimeType string, isGzipped bool, e error) {
func parseMultipart(r *http.Request) (
fileName string, data []byte, mimeType string, isGzipped, isChunkedFile bool, e error) {
form, fe := r.MultipartReader() form, fe := r.MultipartReader()
if fe != nil { if fe != nil {
glog.V(0).Infoln("MultipartReader [ERROR]", fe) glog.V(0).Infoln("MultipartReader [ERROR]", fe)
@ -63,6 +64,8 @@ func parseMultipart(r *http.Request, isChunkedFile bool) (
} }
} }
isChunkedFile, _ = strconv.ParseBool(r.FormValue("cm"))
if !isChunkedFile { if !isChunkedFile {
dotIndex := strings.LastIndex(fileName, ".") dotIndex := strings.LastIndex(fileName, ".")

Loading…
Cancel
Save