2012-11-19 44 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