我正在使用 golangnet/http
包来构建一个网络服务器。现在我必须处理大文件上传,这意味着服务器可能会收到请求Expect: 100 Continue
。在收到所有数据之前,我不会向客户端发送响应。但是每次我完成一个请求并返回,golang默认会发送一个响应,我该如何实现呢?
问问题
6193 次
1 回答
0
使用 request.ParseMultipartForm,
ParseMultipartForm 将请求正文解析为 multipart/form-data。整个请求正文被解析,其文件部分的最多 maxMemory 字节存储在内存中,其余部分存储在磁盘中的临时文件中。ParseMultipartForm 在必要时调用 ParseForm。一次调用 ParseMultipartForm 后,后续调用无效。
So yo just can do:
import(
"ioutil"
"net/http"
)
//check all posible errors, I´m assuming you just have one file per key
func handler(w http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(1000000) //1 MB in memory, the rest in disk
datas := r.MultipartForm
for k, headers := range datas.File {
auxiliar, _ := headers[0].Open() //first check len(headers) is correct
fileName:=headers[0].Filename
file, _ := ioutil.ReadAll(auxiliar)
// do what you need to do with the file
}
}
在前端你应该有一些像这样的javascript:
function handleFile(url,file){
let data=new FormData();
data.append("key",file); //this is the key when ranging over map at backEnd
fetch(url,{method:"PUT",body:data})
}
于 2018-04-09T08:31:07.710 回答