mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2020-11-18 19:53:40 -08:00
support range header
This commit is contained in:
parent
09ca1686bd
commit
af80d889af
@ -274,18 +274,18 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var file *os.File
|
||||||
var reader io.Reader
|
var reader io.Reader
|
||||||
|
|
||||||
if n > _24K {
|
if n > _24K {
|
||||||
file, err := ioutil.TempFile(s.tempPath, "transfer-")
|
file, err = ioutil.TempFile(s.tempPath, "transfer-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
n, err = io.Copy(file, io.MultiReader(&b, f))
|
n, err = io.Copy(file, io.MultiReader(&b, f))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Remove(file.Name())
|
cleanTmpFile(file)
|
||||||
|
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
@ -305,10 +305,14 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
if err := json.NewEncoder(buffer).Encode(metadata); err != nil {
|
if err := json.NewEncoder(buffer).Encode(metadata); err != nil {
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, errors.New("Could not encode metadata").Error(), 500)
|
http.Error(w, errors.New("Could not encode metadata").Error(), 500)
|
||||||
|
|
||||||
|
cleanTmpFile(file)
|
||||||
return
|
return
|
||||||
} else if err := s.storage.Put(token, fmt.Sprintf("%s.metadata", filename), buffer, "text/json", uint64(buffer.Len())); err != nil {
|
} else if err := s.storage.Put(token, fmt.Sprintf("%s.metadata", filename), buffer, "text/json", uint64(buffer.Len())); err != nil {
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, errors.New("Could not save metadata").Error(), 500)
|
http.Error(w, errors.New("Could not save metadata").Error(), 500)
|
||||||
|
|
||||||
|
cleanTmpFile(file)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,10 +327,19 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
relativeURL, _ := url.Parse(path.Join(token, filename))
|
relativeURL, _ := url.Parse(path.Join(token, filename))
|
||||||
fmt.Fprintln(w, getURL(r).ResolveReference(relativeURL).String())
|
fmt.Fprintln(w, getURL(r).ResolveReference(relativeURL).String())
|
||||||
|
|
||||||
|
cleanTmpFile(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cleanTmpFile(f *os.File) {
|
||||||
|
if f != nil {
|
||||||
|
f.Close()
|
||||||
|
os.Remove(f.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
// ContentType is the original uploading content type
|
// ContentType is the original uploading content type
|
||||||
ContentType string
|
ContentType string
|
||||||
@ -393,19 +406,20 @@ func (s *Server) putHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var file *os.File
|
||||||
|
|
||||||
if n > _24K {
|
if n > _24K {
|
||||||
file, err := ioutil.TempFile(s.tempPath, "transfer-")
|
file, err = ioutil.TempFile(s.tempPath, "transfer-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer file.Close()
|
defer cleanTmpFile(file)
|
||||||
|
|
||||||
n, err = io.Copy(file, io.MultiReader(&b, f))
|
n, err = io.Copy(file, io.MultiReader(&b, f))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Remove(file.Name())
|
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
return
|
return
|
||||||
@ -884,11 +898,24 @@ func (s *Server) getHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Content-Disposition", fmt.Sprintf("%s; filename=\"%s\"", disposition, filename))
|
w.Header().Set("Content-Disposition", fmt.Sprintf("%s; filename=\"%s\"", disposition, filename))
|
||||||
w.Header().Set("Connection", "keep-alive")
|
w.Header().Set("Connection", "keep-alive")
|
||||||
|
|
||||||
if _, err = io.Copy(w, reader); err != nil {
|
file, err := ioutil.TempFile(s.tempPath, "range-")
|
||||||
|
if err != nil {
|
||||||
log.Printf("%s", err.Error())
|
log.Printf("%s", err.Error())
|
||||||
http.Error(w, "Error occurred copying to output stream", 500)
|
http.Error(w, "Error occurred copying to output stream", 500)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer cleanTmpFile(file)
|
||||||
|
|
||||||
|
tee := io.TeeReader(reader, file)
|
||||||
|
_, err = ioutil.ReadAll(tee)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("%s", err.Error())
|
||||||
|
http.Error(w, "Error occurred copying to output stream", 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.ServeContent(w, r, filename, time.Now(), file)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) RedirectHandler(h http.Handler) http.HandlerFunc {
|
func (s *Server) RedirectHandler(h http.Handler) http.HandlerFunc {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user