go标准库http包创建multipart/form

go 标准库 http创建 multipart/form类型

  • 创建最终要写到request中的数据的容器, 例如 bytes.Buffer
  • 使用multipart包的NewWriter函数;
  • 写入 form-data字段, 文件要使用另外的api;
  • 构建 http.Request, 创建body
  • 发送请求
func uploadFile(apiURL, filePath, fileType, caseID, fileSource, fileDesc, fileTime string) error {  
    // 打开文件  
    file, err := os.Open(filePath)  
    if err != nil {  
       return err  
    }  
    defer file.Close()  
  
    // 创建一个buffer来存储表单数据  
    var requestBody bytes.Buffer  
    writer := multipart.NewWriter(&requestBody)  
  
    // 写入文件  
    part, err := writer.CreateFormFile("uploadFile", filePath)  
    if err != nil {  
       return err  
    }  
    _, err = io.Copy(part, file)  
    if err != nil {  
       return err  
    }  
  
    // 写入其他参数  
    writer.WriteField("fileType", fileType)  
    writer.WriteField("caseId", caseID)  
    writer.WriteField("fileSource", fileSource)  
    writer.WriteField("fileDesc", fileDesc)  
    writer.WriteField("fileTime", fileTime)  
  
    // 完成表单写入  
    err = writer.Close()  
    if err != nil {  
       return err  
    }  
  
    // 创建POST请求  
    request, err := http.NewRequest("POST", apiURL, &requestBody)  
    if err != nil {  
       return err  
    }  
  
    // 设置请求头  
    request.Header.Set("Content-Type", writer.FormDataContentType())  
  
    // 发送请求  
    client := &http.Client{}  
    response, err := client.Do(request)  
    if err != nil {  
       return err  
    }  
    defer response.Body.Close()  
  
    // 检查响应状态码  
    if response.StatusCode != http.StatusOK {  
       return fmt.Errorf("上传失败,状态码:%d", response.StatusCode)  
    }  
  
    return nil  
}
posted @   潜行1  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示