You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang Gin中SaveUploadedFile无法正常保存.tgz文件求助

问题排查:Gin SaveUploadedFile保存.tgz文件损坏体积缩水

使用gin.Context的SaveUploadedFile方法保存multipart上传文件时,图片文件处理正常,但.tgz类型文件保存后体积大幅缩小(原文件33KB,保存后仅14KB),导致文件损坏。相关代码如下:

multipartFileHeader, err := c.FormFile("file")
if err != nil {
    c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
        "message": "No file is received",
    })
    return "", err
}
fmt.Println("file size")
fmt.Println(multipartFileHeader.Size)
extension := filepath.Ext(multipartFileHeader.Filename)
newFileName := uuid.New().String() + extension
localTargetFilePath := "/tmp/" + newFileName
if err := c.SaveUploadedFile(multipartFileHeader, localTargetFilePath); err != nil {
    c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
        "message": "Unable to save the file",
    })
    return "", err
}

可能的排查方向

  • 前端上传编码问题:确认前端是否以二进制模式传输.tgz文件。若前端误用文本编码(如UTF-8)发送二进制文件,会导致字节转换丢失,引发文件损坏。需保证请求的Content-Type为multipart/form-data,且文件以二进制流形式上传。
  • 替换Gin方法手动验证:Gin的SaveUploadedFile底层依赖io.Copy,可手动实现文件保存流程对比测试:
    file, err := multipartFileHeader.Open()
    if err != nil {
        c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"message": "Failed to open uploaded file"})
        return "", err
    }
    defer file.Close()
    
    outFile, err := os.Create(localTargetFilePath)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"message": "Failed to create local file"})
        return "", err
    }
    defer outFile.Close()
    
    _, err = io.Copy(outFile, file)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"message": "Failed to write file"})
        return "", err
    }
    
    若手动保存正常,说明当前Gin版本可能存在特定场景bug,尝试升级Gin到最新稳定版。
  • 验证文件上传完整性:检查打印的multipartFileHeader.Size是否与原文件大小一致。若Size值本身偏小,说明前端上传时文件未传输完整,需排查前端上传逻辑(如是否存在上传中断、分片上传未合并等问题)。
  • 文件系统环境检查:确认/tmp目录有足够写入权限,且磁盘空间充足。虽然此类问题通常会直接报错,但也可排除文件系统自动压缩等特殊配置影响。

内容的提问来源于stack exchange,提问作者Rajesh Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:24:19