我想允许上传文件。Go 被用于服务器端处理请求。每当他们尝试上传的文件太大时,我想发送响应“文件太大”。我想在上传整个文件(带宽)之前这样做。
我正在使用以下代码段,但它仅在客户端完成上传后发送响应。它保存了一个 5 kB 的文件。
const MaxFileSize = 5 * 1024
// This feels like a bad hack...
if r.ContentLength > MaxFileSize {
if flusher, ok := w.(http.Flusher); ok {
response := []byte("Request too large")
w.Header().Set("Connection", "close")
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(response)))
w.WriteHeader(http.StatusExpectationFailed)
w.Write(response)
flusher.Flush()
}
conn, _, _ := w.(http.Hijacker).Hijack()
conn.Close()
return
}
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize)
err := r.ParseMultipartForm(1024)
if err != nil {
w.Write([]byte("File too large"));
return
}
file, header, err := r.FormFile("file")
if err != nil {
panic(err)
}
dst, err := os.Create("upload/" + header.Filename)
defer dst.Close()
if err != nil {
panic(err)
}
written, err := io.Copy(dst, io.LimitReader(file, MaxFileSize))
if err != nil {
panic(err)
}
if written == MaxFileSize {
w.Write([]byte("File too large"))
return
}
w.Write([]byte("Success..."))
达令说
相关分类