热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Golang:使用io.Pipe的多部分POST多部分请求无法正确处理

我将io与GOmultipart一起使用将文件上传到本地服务器,并且此功能每次都失败。

我将io与GO multipart一起使用将文件上传到本地服务器,并且此功能每次都失败。 (这只是表单请求的一部分)

func httpreq(uri string,params map[string]interface{},fieldname,filename string,filebuf []byte) (*http.Request,error) {
pr,pw := io.Pipe()
writer := multipart.NewWriter(pw)
go func() {
defer pw.Close()
r := bytes.NewReader(filebuf)
part1,err := writer.CreateFormFile(fieldname,filename)
if err != nil {
return
}
if _,err = io.Copy(part1,r); err != nil {
return
}
// encode params into Json
var j []byte
j,err = json.Marshal(params)
if err != nil {
return
}
part2,err := writer.CreateFormField("json")
if err != nil {
return
}
_,err = io.Copy(part2,bytes.NewBuffer(j))
if err != nil {
return
}
if err = writer.Close(); err != nil {
return
}
}()
req,err := http.NewRequest("POST",uri,pr)
if err != nil {
return nil,err
}
req.Header.Set("Content-Type",writer.FormDataContentType())
fmt.Printf("---> %+v",req)
return req,err
}

我希望请求这样的东西

--f82711203f053f26bd2ea538ab381e30ec1468bff784e34174b11bb679dc
Content-Disposition: form-data; name="file"; filename="nov.txt"
Content-Type: application/octet-stream
November 2019
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
--f82711203f053f26bd2ea538ab381e30ec1468bff784e34174b11bb679dc
Content-Disposition: form-data; name="json"
{"data_profile_id":"1","file_sha":"12345678","no_cache":true,"service_name":"test","tenant_id":"tenant"}
--f82711203f053f26bd2ea538ab381e30ec1468bff784e34174b11bb679dc--

但是我明白了

--c3b154dc079686ba162e0ab057c59580932ebab25294569201ef854394a7
Content-Disposition: form-data; name="file"; filename="102.pdf"
Content-Type: application/octet-stream
--c3b154dc079686ba162e0ab057c59580932ebab25294569201ef854394a7
Content-Disposition: form-data; name="json"

如果我搬出一部分

// encode params into Json
var j []byte
j,bytes.NewBuffer(j))
if err != nil {
return
}

那似乎让我有点接近预期

--f82711203f053f26bd2ea538ab381e30ec1468bff784e34174b11bb679dc
Content-Disposition: form-data; name="file"; filename="nov.txt"
Content-Type: application/octet-stream
November 2019
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
--f82711203f053f26bd2ea538ab381e30ec1468bff784e34174b11bb679dc

这里有专家,我想念什么?





推荐阅读
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
author-avatar
tomorrow
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有