golang http处理大文件上传

时间:2013-10-09 08:56:35

标签: html5 file-upload webserver go

我正在使用golang net/http包构建一个webserver。现在我必须处理大文件上传,这意味着服务器可能会收到Expect: 100 Continue的请求。我不会发送回复客户端直到收到所有数据。但是每次我完成一个请求并返回时,golang默认会发回一个响应,我该如何实现呢?

1 个答案:

答案 0 :(得分: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
    }
}

在frontEnd你应该有一些这样的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})
}