Zip 无法使用 Go 打开,因为服务器中的 MIME 不正确



我有一个将zip文件发送到服务器的应用程序。然后操纵拉链,并在响应中发出新的拉链。

问题在于,发送回的响应具有application/octet-stream的MIME而不是application/zip消息。

我认为这就是为什么archive/zip无法打开所得ZIP并且我得到zip: not a valid zip file的原因。

在检索邮政编码时,我有什么办法可以更改哑光?

我获得Zip的代码:

func GetZipFromServer(zipname string) {
    ////////////////////////////////////////////////////
    // Open local zip file
    file, err := os.Open(zipname + ".zip")
    log1.Check(err, "File open failed")
    defer file.Close()
    stat, err := file.Stat()
    log1.Check(err, "Stat failed")
    fmt.Println(stat.Size())
    ////////////////////////////////////////////////////
    // Get new zip from server
    url := "http://some_server123.com/rest/"
    res, err := http.Post(url, "application/zip", file)
    log1.Check(err, "Response failed")
    ////////////////////////////////////////////////////
    // Save new zip from server as file
    f, err := os.Create(zipname + ".html.zip")
    log1.Check(err, "Cannot create file")
    err = res.Write(f)
    log1.Check(err, "Cannot write file")
    err = f.Close()
    log1.Check(err, "Cannot close file")
}

响应方法以服务器响应格式写入参数的响应。那不是你想要的。

使用io.copy将响应主体复制到文件:

func GetZipFromServer(zipname string) {
    file, err := os.Open(zipname + ".zip")
    log1.Check(err, "File open failed")
    defer file.Close()
    stat, err := file.Stat()
    log1.Check(err, "Stat failed")
    fmt.Println(stat.Size())
    url := "http://some_server123.com/rest/"
    res, err := http.Post(url, "application/zip", file)
    log1.Check(err, "Response failed")
    defer resp.Body.Close()
    f, err := os.Create(zipname + ".html.zip")
    log1.Check(err, "Cannot create file")
    _, err := io.Copy(f, resp.Body)
    log1.Check(err, "Cannot write file")
    err = f.Close()
    log1.Check(err, "Cannot close file")
}

另外,关闭响应主体。

相关内容

最新更新