func NewNeedle(r *http.Request, fixJpgOrientation bool) (n *Needle, e error) { fname, mimeType, isGzipped := "", "", false n = new(Needle) fname, n.Data, mimeType, isGzipped, n.LastModified, n.Ttl, e = ParseUpload(r) if e != nil { return } if len(fname) < 256 { n.Name = []byte(fname) n.SetHasName() } if len(mimeType) < 256 { n.Mime = []byte(mimeType) n.SetHasMime() } if isGzipped { n.SetGzipped() } if n.LastModified == 0 { n.LastModified = uint64(time.Now().Unix()) } n.SetHasLastModifiedDate() if n.Ttl != EMPTY_TTL { n.SetHasTtl() } if fixJpgOrientation { loweredName := strings.ToLower(fname) if mimeType == "image/jpeg" || strings.HasSuffix(loweredName, ".jpg") || strings.HasSuffix(loweredName, ".jpeg") { n.Data = images.FixJpgOrientation(n.Data) } } n.Checksum = NewCRC(n.Data) commaSep := strings.LastIndex(r.URL.Path, ",") dotSep := strings.LastIndex(r.URL.Path, ".") fid := r.URL.Path[commaSep+1:] if dotSep > 0 { fid = r.URL.Path[commaSep+1 : dotSep] } e = n.ParsePath(fid) return }
func NewNeedle(r *http.Request, fixJpgOrientation bool) (n *Needle, e error) { fname, mimeType, isGzipped := "", "", false n = new(Needle) fname, n.Data, mimeType, isGzipped, n.LastModified, n.Ttl, e = ParseUpload(r) if e != nil { return } if len(fname) < 256 { n.Name = []byte(fname) n.SetHasName() } if len(mimeType) < 256 { n.Mime = []byte(mimeType) n.SetHasMime() } if isGzipped { n.SetGzipped() } //如果没有修改时间则设置为当前服务器时间 if n.LastModified == 0 { n.LastModified = uint64(time.Now().Unix()) } n.SetHasLastModifiedDate() //如果有超时时间则设置之 if n.Ttl != EMPTY_TTL { n.SetHasTtl() } /* 如果是jpg则进行更多的处理 因为haystack本身就是fb设置来存储照片的解决方案 */ if fixJpgOrientation { loweredName := strings.ToLower(fname) if mimeType == "image/jpeg" || strings.HasSuffix(loweredName, ".jpg") || strings.HasSuffix(loweredName, ".jpeg") { n.Data = images.FixJpgOrientation(n.Data) } } //检验 n.Checksum = NewCRC(n.Data) /* curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6 {"size": 43234} */ //01637037d6即去掉volume后的结果 commaSep := strings.LastIndex(r.URL.Path, ",") dotSep := strings.LastIndex(r.URL.Path, ".") fid := r.URL.Path[commaSep+1:] if dotSep > 0 { fid = r.URL.Path[commaSep+1 : dotSep] } e = n.ParsePath(fid) return }