我正在使用 golang net/http 包通過郵遞員檢索上傳的 zip 檔案。附件檔案鏈接。它不是危險檔案。隨時檢查。
開發環境
- 本地機器 m1 macbook pro golang 1.17.2 - 沒問題
- 服務器 docker image golang:1.17.5-stretch - 有問題。
用于捕獲 post 表單 transSourceFile 檔案的代碼。
func HandleFileReqTest(w http.ResponseWriter, req *http.Request, params map[string]string) err {
if err := req.ParseMultipartForm(32 << 20); err != nil {
return err
}
file, header, err := req.FormFile("transSourceFile")
if err != nil {
return err
}
defer file.Close()
fmt.Println("header.Size:", header.Size)
return nil
}
我試過下面的代碼也沒有用
func HandleFileReqTest(w http.ResponseWriter, req *http.Request, params map[string]string) err {
if err := req.ParseForm(); err != nil {
return err
}
req.ParseMultipartForm(32 << 20)
file, header, err := req.FormFile("transSourceFile")
if err != nil {
return err
}
defer file.Close()
fmt.Println("header.Size:", header.Size)
return nil
}
結果:本地機器的檔案大小與原始檔案相同。帶有 golang:1.17.5-stretch 的服務器與原始檔案相比,檔案大小不同。
結果,我無法在服務器中解壓縮檔案。任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
您需要將表單檔案復制到實際檔案中:
f, err := os.Create("some.zip")
defer f.Close()
n, err := io.Copy(f, file)
uj5u.com熱心網友回復:
資料沒有完全重繪 到檔案中。您應該先關閉檔案以確保資料已完全重繪 。
// create a local file filename
dst, err := os.Create("filename.zip")
// save it
fl, err = io.Copy(dst, src)
// Close the file
dst.Close()
stat, _ := dst.Stat()
//Now check the size stat.Size() or header.Size after flushing the file.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409643.html
標籤:
上一篇:如何在Golang中創建具有這種資料型別和值的變數?指向具有nil值的結構的指標?
下一篇:連接到SSH服務器
