怎么用http上传一个文件到服务器 python

怎么用http上传一个文件到服务器 python,第1张

首先,标准HTTP协议对上传文件燃念等表单的定义在这里:wwwietforg/rfc/rfc1867txt 大概数据包格式如下:

单文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-dataname="field1"

Joe Blow

--AaB03x

content-disposition: form-dataname="pics"filename="file1.txt"

Content-Type: text/plain

... contents of file1.txt ...

--AaB03x--

多文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-dataname="field1"

Joe Blow

--AaB03x

content-disposition: form-dataname="pics"

Content-type: multipart/mixed, boundary=BbC04y

--BbC04y

Content-disposition: attachmentfilename="file1.txt"

其次,python上传文件的几种方法

1 自己封装皮祥困HTTP的POST数据包:http//stackoverflowcom/questions/680305/宴链using-multipartposthandler-to-post-form-data-with-python

import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): LIMIT = '----------lImIt_of_THE_fIle_eW_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + LIMIT) L.append('Content-Disposition: form-dataname="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files:

当我们在使用restful api风格写接口的时候,我们可能会这样

我们知道

GET PUT DELETE 传参方式为params

POST 传参方式为body

当我们有一个 PUT 方法更新用户信息的接口 /user/{user_id} ,当更新用户头像时散裤可能需冲困简要在body中传递头像文件,那这时怎么办呢?

大多数框架中都对这两种方法做了处理

表单中

postman中

我们看laravel框架对这两尺拆种方法的处理

首先获取 REQUEST_METHOD 请求方法,然后判断如果是 post ,查找是否设置 X-HTTP-METHOD-OVERRIDE ,如果设置了,返回 X-HTTP-METHOD-OVERRIDE 设置的方法,否则去找 body 中的 _method 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12151939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存