2012-11-19 46 views
3

我试图跟踪GOLANG上传进度的上传进度,这就是我得到的那一刻如何跟踪在golang

func Upload(w http.ResponseWriter, req *http.Request) { 

    mr, err := req.MultipartReader() 
    if err != nil { 
     return 
    } 

    for { 
     // var part *multipart.Part 
     part, err := mr.NextPart() 
     mr.partsRead 

     if err == io.EOF { 
      break 
     } 
     println(part) 

    } 

} 
+0

那么......问题是什么? – thwd

+0

问题是我如何跟踪上传进度。 上面的代码是行不通的,我得到的文件只在一个部分 谢谢 – thesyncim

+0

在控制台上谢谢 – thesyncim

回答

5

这将工作,一个到calc下字节阅读以及总体进度,您需要指向某处,在此代码示例中,我将其指向了一个文件。

func Upload(w http.ResponseWriter, req *http.Request) { 

    mr, err := req.MultipartReader() 
    if err != nil { 
     return 
    } 
    length := req.ContentLength 
    for { 

     part, err := mr.NextPart() 
     if err == io.EOF { 
      break 
     } 
     var read int64 
     var p float32 
     dst, err := os.OpenFile("dstfile", os.O_WRONLY|os.O_CREATE, 0644) 
     if err != nil { 
      return 
     } 
     for { 
      buffer := make([]byte, 100000) 
      cBytes, err := part.Read(buffer) 
      if err == io.EOF { 
       break 
      } 
      read = read + int64(cBytes) 
      //fmt.Printf("read: %v \n",read) 
      p = float32(read)/float32(length) *100 
      fmt.Printf("progress: %v \n",p) 
      dst.Write(buffer[0:cBytes]) 
     } 
    } 
} 
+0

感谢您的答案! 该代码不工作,我继续收到该文件只在一个部分 – thesyncim

+0

这个修正后的版本现在测试和工作 ,但考虑到没有mimetype检查和东西 –

+0

完美...谢谢 – thesyncim