duanhui9840 2017-12-01 00:52
浏览 35
已采纳

由于来自服务器的错误的MIME,无法使用Go打开邮编

I have an application that sends a zip file to a server. The zip is then manipulated and a new zip is send back in the response.

The problem is that the response sent back has a mime of application/octet-stream instead of application/zip message.

I think this is the reason why the resulting zip can't be opened by archive/zip and I get a zip: not a valid zip file.

Is there any way for me to change the mime when retrieving the zip file?

My code for getting the 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")
}
  • 写回答

1条回答 默认 最新

  • dqeq885710 2017-12-01 01:12
    关注

    The Response.Write method writes the response in server response format to the argument. That's not what you want.

    Use io.Copy to copy the response body to the file:

    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")
    }
    

    Also, close the response body.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私