精华内容
下载资源
问答
  • 上传文件到服务器的方式种类有很多,今天我们这里讲一讲Content-Type为multipart/form-data类型的方式上传文件时要注意的地方,我们以上传.xlsx表格为例。 直接上代码,不啰嗦 import requests from requests_...
    • 上传文件到服务器的方式种类有很多,今天我们这里讲一讲Content-Typemultipart/form-data类型的方式上传文件时要注意的地方,我们以上传.xlsx表格为例。
    • 直接上代码,不啰嗦
    import requests
    from requests_toolbelt import MultipartEncoder
    
    def Send_To_Server(demo_str):
        url = "https://test.juziwulian.com:17000/boss/sales/upgradeInfoUpload"
        m = MultipartEncoder(
            fields={
                'file': ('filename', open(demo_str, 'rb'), "type=application/wps-office.xlsx")
            }
        )
        headers = {'Content-Type': m.content_type, 'accept': 'application/json'}
        response = requests.post(url, headers=headers, data=m, timeout=10)
        state_test = eval(response.text)
        print(state_test)
    Send_To_Server('demo.xlsx')
    
    • 这里要注意导入一个特殊的模块MultipartEncoder,用该模块来封装所需要上传的文件,另外我们还要特别注意的是,headers头不能直接,headers = {'Content-Type': multipart/form-data, 'accept': 'application/json'},而是要用MultipartEncoder模块中已有的内容类型,所以我的headers应为headers = {'Content-Type': m.content_type, 'accept': 'application/json'},这是特别要注意的。
    • 当然在fields中还可以添加很多其他字段
      m = MultipartEncoder(
        fields={'filename': 'demo',
                'version': '10001,
                'file': ('filename', open(demo_str, 'rb'), "type=application/wps-office.xlsx")
                }
        )
    
    • 等等
    • 希望能帮助你!
    展开全文
  • HTTP协议之multipart/form-data请求分析

    万次阅读 多人点赞 2012-01-06 15:36:34
    无意中发现了一个巨牛的人工智能教程,忍...首先来了解什么是multipart/form-data请求: 根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还...

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

    首先来了解什么是multipart/form-data请求:

    根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还会有multipart/form-data请求之说呢?这就要从头来说了。

    http协议大家都知道是规定了以ASCII码传输,建立在tcp、ip协议之上的应用层规范,规范内容把http请求分为3个部分:状态行,请求头,请求体。所有的方法、实现都是围绕如何运用和组织这三部分来完成的。换句话来说就是万变不离其中,只要我们了解了http请求的组成部分后,自然就可以应变任何实际工作中的需求和问题了。

    关于状态行,请求头,请求体等三部分的具体内容,大家可以参考官方的协议文档http://www.faqs.org/rfcs/rfc2616.html,这里主要分析multipart/form-data请求具体是怎么一回事。

    既然http协议本身的原始方法不支持multipart/form-data请求,那这个请求自然就是由这些原始的方法演变而来的,具体如何演变且看下文:

    • multipart/form-data的基础是post请求,即基于post请求来实现的
    • multipart/form-data形式的post与普通post请求的不同之处体现在请求头,请求体2个部分

    multipart/form-data请求头:

    必须包含Content-Type信息,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中不同参数的内容(普通post请求的参数分割符默认为&,参数与参数值的分隔符为=)。具体的头信息格式如下:

    Content-Type: multipart/form-data; boundary=${bound}    

    其中${bound} 是一个占位符,代表我们规定的具体分割符;可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。如:--------------------56423498738365

    样例:

    Content-Type: multipart/form-data; boundary=--------------------56423498738365


    multipart/form-data请求体:

    它也是一个字符串,不过和普通post请求体不同的是它的构造方式。普通post请求体是简单的键值对连接,格式如下:

    k1=v1&k2=v2&k3=v3

    而multipart/form-data则是添加了分隔符、参数描述信息等内容的构造体。具体格式如下:

    ${bound}
    Content-Disposition: form-data; name="Filename"
    
    HTTP.pdf
    ${bound}
    Content-Disposition: form-data; name="file000"; filename="HTTP协议详解.pdf"
    Content-Type: application/octet-stream
    
    %PDF-1.5
    file content
    %%EOF
    ${bound}
    Content-Disposition: form-data; name="Upload"
    
    Submit Query
    ${bound}--

    其中${bound}就是之前请求头信息中的分割符,如果头信息中规定为123,那么这里也要为123(其作用等同于普通post请求中的&符号的作用,即分割参数)。很明显如果按照之前请求头的样例来,则这里的${bound}值应该替换为--------------------56423498738365,注意最后一个${bound}后需要固定添加两个横杆--

    另外可以很容易的看出,这个请求体被分隔符划分为3个部分,而每个部分其实就是一个参数的键值描述(其作用等同于普通post请求的k1=v1的部分),但对参数信息的描述可以比普通post请求更加丰富,这就是为什么multipart/form-data能发送文件的原因。

    每一个部分都是以分隔符开始的,接着是该部分内容的描述信息,然后是一个回车,最后是描述信息的具体内容。如果传送的内容是一个文件的话,那么还会包含文件名信息,以及文件内容的类型;上面的第二个小部分其实是一个文件体的结构,最后的分割符后会以--结尾,表示请求体结束。

    综上,可以知道要发送一个multipart/form-data的请求,其实任何支持post请求的工具或语言都可以支持,只是自己要稍微包装一下便可。

     

    参考资料:

    百度百科: http://baike.baidu.com/view/9472.htm  

    http1.1协议规范: http://www.faqs.org/rfcs/rfc2616.html

    分析工具:httpAnalyzer

     

    ==========================纯文本格式分割线=========================

     

    Header = {"Content-type" : "multipart/form-data, boundary=AaB03x"}
    
    Data =	"--AaB03x\r\n" +
    		"content-disposition: form-data; name=\"field1\"\r\n" +
    		"\r\n" + 
    		"Joe Blow\r\n" +
    		"--AaB03x\r\n" +
    		"content-disposition: form-data; name="pics"; filename=\"file1.txt\"\r\n" +
    		"Content-Type: text/plain\r\n" +
    		"\r\n" +
    		"...binary contents of file1.txt ...\r\n" +
    		"--AaB03x--\r\n"

    其中:...binary contents of file1.txt ... 要替换成真实的文件二进制内容。

    ===========================请求代码分割线============================

     

     

    如何使用Python发送multipart/form-data请求,请查看 http://blog.csdn.net/five3/article/details/74913742

    展开全文
  • multipart/form-data: 1、既可以提交普通键值对,也可以提交文件键值对,也就是说可以混合提交,而且提交文件可以提交多个。 2、HTTP规范中的Content-Type不包含此类型,只能用在POST提交方式下,属于http客户端...

    情景再现:

    上传文件到.net(wcf)后台时,总是上传不成功,后台要求Content-Type是application/octet-stream,我使用multipart/form-data方式,content-type是multipart/form-data,后来查了查这是两种不同的内容类型,在http的请求体中,数据组织方式不一样,所以,后台接收失败。

     

    multipart/form-data:

    1、既可以提交普通键值对,也可以提交(多个)文件键值对。

    2、HTTP规范中的Content-Type不包含此类型,只能用在POST提交方式下,属于http客户端(浏览器、java httpclient)的扩展

    3、通常在浏览器表单中,或者http客户端(java httpclient)中使用。

    页面中,form的enctype是multipart/form-data,提交时,content-type也是multipart/form-data。

     

    multipart/form-data格式,

     

    POST http://www.xx.com/myproject/service1
    Host: 192.168.0.201:8694
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    Cache-Control: no-cache
    Postman-Token: c3d85a6c-9849-7e3e-5c89-5b994b335b1d
    
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="name1"
    
    value1
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="name2"
    
    value2
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="file1"; filename="94b5b232gw1ewlx3p595wg20ak0574qq.gif"
    Content-Type: image/gif
    
    
    ----WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="file2"; filename="1443175219259.jpg"
    Content-Type: image/jpeg
    
    
    ----WebKitFormBoundary7MA4YWxkTrZu0gW

     

     

     

     

     

     

     

    application/octet-stream

    1、只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)

    2、属于HTTP规范中Content-Type的一种

    3、很少使用

     

    application/x-www-form-urlencoded

    1、不属于http content-type规范,通常用于浏览器表单提交,数据组织格式:name1=value1&name2=value2,post时会放入http body,get时,显示在在地址栏。

    2、所有键与值,都会被urlencoded,请查看urlencoder

    数据组织格式

     

    POST http://www.xx.com/myproject/service HTTP/1.1
    Host: 192.168.0.201:8694
    Content-Type: application/json
    Cache-Control: no-cache
    Postman-Token: f5f6240c-08d3-8695-9473-607038f71eaa
    
    name11=file1&name2=value2

     

     

     

     

     

    参考:

    HTTP Content-type对照表

     

    9年全栈开发经验,请关注个人公众号

     

     

    展开全文
  • multipart/form-data

    千次阅读 2014-11-17 16:33:42
    multipart/form-data解释说明


    //解释一下:multipart/form-data 以前用struts2文件上传的时候遇到过,当时没有做了解,只知道上传文件的时候要将表单的enctype设置为“multipart/form-data”

    //现在大概解释一下为什么上传文件的时候要将enctype设置为multipart/form-data。

    //application/x-www-form-urlencoded这种类型,上面已经大概说过了,有需要可以看一下。这里说的很清楚application/x-www-form-urlencoded在发送大二进制数据和文本中包含非ASCII编码的字符时是不起作用的。

    //multipart/form-data就是用于提交表单中包含文件、非ASCII编码数据和二进制数据是,应该采用的enctype格式,所以以前上传文件时,就必须设置enctype为multipart/form-data,现在知道大概原因了;


    //解释一下:上面给出了一个上传文件的表单的简单实例;其余的我也不太懂,希望大神告之;


    //解释一下:上面是说如果在上面的表单中填入”Larry“(就是what is your name?这个input标签)和文件”file1.txt“(what files are you sending?的input标签)

    //上面填的数据就变为上面那一大串:Content-Type:multipart/form-data;boundary=AaB03x...(应该是请求头偷笑)


    //解释一下:这个和上面那个差不多,就是你选择上传的文件是gif图片,就会生成上面的报文


    展开全文
  • 我们知道在通过POST方式向服务器发送AJAX请求时最好要通过设置请求头来指定为application/x-www-form-urlencoded编码类型。知道通过表单上传文件时必须指定编码类型为"multipart/form-data"。那么为什么要这么设置呢
  • 今天小编就为大家分享一篇python处理multipart/form-data的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • c#没有现成的multipart/form-data库,自己封的一个demo供参考。
  • 主要介绍了java map转Multipart/form-data类型body实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
  • Content type 'multipart/form-data;boundary=--------------------------496238283102520395700876;解决方案 在使用PostMan发送请求时出现了这个问题 原因是我们的接口做了规范,默认就是通过@RequestBody 的方式...
  • 我们都知道要让form能提交文件,需要在form上指定enctype=multipart/form-data的attribute,这样才能上传文件,关于enctype的文章很多,就不再做解释。 问题是因为使用了MVC的Html.BeginForm()来输出表单代码,默认...
  • 使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
  • 今天小编就为大家分享一篇Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 使用indy自带的idhttp控件,用form表单(multipart/form-data)形式上传文件(图片,视频等)
  • 如何用SpringBoot框架来接收multipart/form-data文件

    万次阅读 多人点赞 2017-08-09 21:27:04
    现在很多文件上传类型都是multipart/form-data类型的,HTTP请求如下所示: 可是问题就在于如果用传统的Struts2或者servlet等都可以很容易的实现文件接收的功能,例如下面的代码就可以实现: boolea...
  • form表单中的enctype=“multipart/form-data“什么意思?

    万次阅读 多人点赞 2019-10-12 09:37:21
    multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。 需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart...
  • http post方式上传文件与表格,ContentType = multipart/form-data
  • 本文实例讲述了PHP实现支持GET,POST,Multipart/form-data的HTTP请求类及其应用,分享给大家供大家参考。具体如下: HttpRequest.class.php类文件如下: <?php /** HttpRequest class, HTTP请求类,支持GET,POST,...
  • 1. 首先multipart/form-data,必须要使用post方式才可以请求到;2. 其次后台需要配置&lt;bean id="multipartResolver" class="org.springframework.web.multipart.commons....
  • c#下post multipart/form-data和JSON

    热门讨论 2017-01-09 11:47:09
    c#下post 发送 multipart/form-data和JSON数据
  • Http post 发送 multipart/form-data 格式数据-Java 实现代码参考博客 代码 package awesome.data.structure.http; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java...
  • c#post multipart/form-data和JSON数据
  • 报错 415 或 Content type 'multipart/form-data;boundary=--------------------------9107 经过半个小时的查找, 改Content-Type 改传值方式 改@RequestBody 改@Param 改@RequestParam 最后证实,@RequestBody与...
  • 记录一下小错误,今天用postman测试添加接口时报错,想传一个实体到接口,便...“msg”: “Content type ‘multipart/form-data;boundary=--------------------------258075776767858126421870;charset=UTF-8’ not ...
  • 深入解析 multipart/form-data

    万次阅读 多人点赞 2019-07-18 20:34:09
    multipart/form-data text-plain 默认情况下是 application/x-www-urlencoded,当表单使用 POST 请求时,数据会被以 x-www-urlencoded 方式编码到 Body 中来传送,而如果 GET 请求,则是附在 url 链接...
  • WebAPI通过multipart/form-data方式同时上传文件以及数据包含客户端上传例子

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,199
精华内容 52,079
关键字:

multipart/form-data