如果机器上有 PycURL,那么可以使用 PycURL 来上传文件。
不过,由于 PycURL 需要用到 curl,在 Windows 下安装可能会有点麻烦,除 PycURL 外,也有一些其它实现 POST 文件上传的方式,比如 这儿 的 2 楼有人贴出了一个将文件进行编码之后再 POST 的方法,另外还有MultipartPostHandler、urllib2_file、poster 等第三方模块。但 MultipartPostHandler 这个模块似乎比较老了,urllib2_file 我试用了一下遇到错误没有成功,这儿我想介绍的是另外一个第三方模块 poster。
如果机器上安装了 Python 的 setuptools,可以通过下面的命令来安装 poster:
装完之后,就可以像下面这样上传文件了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# test_client.py
fromposter.encode importmultipart_encode
fromposter.streaminghttp importregister_openers
importurllib2
# 在 urllib2 上注册 http 流处理句柄
register_openers()
# 开始对文件 "DSC0001.jpg" 的 multiart/form-data 编码
# "image1" 是参数的名字,一般通过 HTML 中的 <input> 标签的 name 参数设置
# headers 包含必须的 Content-Type 和 Content-Length
# datagen 是一个生成器对象,返回编码过后的参数
datagen,headers=multipart_encode({"image1":open("DSC0001.jpg","rb")})
# 创建请求对象
request=urllib2.Request("http://localhost:5000/upload_image",datagen,headers)
# 实际执行请求并取得返回
printurllib2.urlopen(request).read()
|
很简单,文件就上传完成了。
其中那个 register_openers() 相当于以下操作:
|
fromposter.encode importmultipart_encode
fromposter.streaminghttp importStreamingHTTPHandler,StreamingHTTPRedirectHandler,StreamingHTTPSHandler
handlers=[StreamingHTTPHandler,StreamingHTTPRedirectHandler,StreamingHTTPSHandler]
opener=urllib2.build_opener(*handlers)
urllib2.install_opener(opener)
|
另外,poster 也可以携带 cookie,比如:
|
opener=poster.streaminghttp.register_openers()
opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
params={'file':open("test.txt","rb"),'name':'upload test'}
datagen,headers=poster.encode.multipart_encode(params)
request=urllib2.Request(upload_url,datagen,headers)
result=urllib2.urlopen(request)
|
refernce :http://oldj.net/article/python-upload-file-via-form-post/
分享到:
相关推荐
"漂亮的form表单"这个主题关注的是如何创建既美观又功能强大的表单,以提高用户体验并提升网站的整体视觉效果。下面将详细介绍关于form表单的相关知识点。 1. **HTML表单基础** HTML中的`<form>`标签用于定义表单...
多文件上传通常涉及表单数据的Multipart编码。在HTTP请求中,MIME类型为`multipart/form-data`的表单数据允许我们将多个部分(如文本字段和文件)组合在一起发送。每个部分都有自己的头信息,包括文件名和类型。 三...
同时,Ajax和FormData对象使得可以在不刷新页面的情况下异步上传文件。 2. 后端技术:服务器端通常使用各种编程语言来接收和处理文件,如Node.js的multer库、Python的Flask或Django框架、Java的Spring MVC等。它们...
2. **HTTP POST请求**:POST是HTTP中的一个动词,用于向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。在文件上传中,...
4. 文件存储:为了防止文件过多导致磁盘空间问题,服务器通常会设置上传文件的大小限制,并使用文件命名策略避免重名冲突。文件可能存储在文件系统、云存储服务(如AWS S3或阿里云OSS)或数据库的BLOB类型字段中。 ...
3. 多部分表单数据:为了传输文件,浏览器会将文件封装在多部分/边界(multipart/form-data)的HTTP请求体中,每部分包含文件内容和元数据。 4. PHP/Python/Java等后端处理:后端语言通过解析多部分表单数据来接收...
Tornado Stream Upload 是一个专为 Python 的 Tornado Web 框架设计的插件,它优化了文件上传的处理方式,支持流式上传,使得大文件上传变得高效且可控。这个插件主要用于处理通过 "multipart/form-data" 格式的文件...
- **防止文件覆盖**:服务器应检查上传文件的唯一性,防止同名文件覆盖已有的文件。 - **文件验证**:对上传的文件进行类型和大小检查,防止恶意文件(如病毒或脚本)的上传。 - **权限管理**:确保只有授权用户...
例如,开源库如Apache Commons FileUpload对于Java开发者来说是一个常用的处理上传文件的工具,它可以简化后端文件接收的逻辑。另外,前端可能使用了像axios或fetch这样的库来处理AJAX上传,它们可以方便地管理上传...
`<form>`标签可以配置`enctype="multipart/form-data"`属性来支持文件上传。 3. HTTP协议:文件上传通常使用POST请求,文件内容作为请求体的一部分,采用多部分/形式数据(multipart/form-data)编码。 4. 后端...
为了防止这种情况,开发者需要实施严格的文件类型检查、文件大小限制、重命名上传文件以避免覆盖服务器上的重要文件,以及使用安全的存储路径等措施。 下载文件时,服务器通常会提供一个URL,客户端浏览器通过...
流式多部分/表单数据解析器 streaming_form_data提供了一个Python解析器,用于解析multipart/form-data输入块(在通过HTML表单通过HTTP提交数据时使用的编码)。 安装 $ pip install streaming-form-data 如果您...
2. 后端接口:可能包括接收上传文件、返回下载链接等接口,需要与前端API对接。 3. 配置与定制:组件可能允许开发者配置上传和下载的路径、权限控制、错误处理等参数。 4. 错误处理与日志记录:良好的组件会提供异常...
2. **multipart/form-data**:这是上传文件最常见的内容类型,它允许在请求体中包含多个部分,每个部分对应一个表单字段或文件。 3. **JSON**:在请求或响应中,可能需要传递额外的信息,如文件元数据,这些信息...
服务器通常会设定上传文件的大小限制,防止过大文件耗尽服务器资源。在Java中,可以在`web.xml`中配置`multipart-config`元素来设置最大上传大小: ```xml <max-file-size>10485760 <max-request-size>20971520 ...
- **安全性**:上传文件需要限制大小和类型,防止DoS攻击和恶意文件注入。可以通过验证文件扩展名、检查MIME类型、甚至执行文件内容扫描来确保安全。 2. 文件下载: - **HTTP响应头**:服务器通过设置`Content-...
当使用HTML的`<form>`标签上传文件时,如果没有指定正确的`enctype`属性,Django的视图函数`request.FILES`将无法接收到上传的文件。尽管你可能在`request.POST`中找到了文件名,但这只是一个字符串,而非实际的文件...
- 权限控制:确保只有授权用户才能上传文件。 6. 优化与性能: - 分块上传:对于大文件,可以采用分块上传,提高上传速度和用户体验。 - 进度显示:通过前端实时获取上传进度,提供更好的用户反馈。 - 断点续传...
- **大小限制**:限制上传文件的大小,防止DoS攻击。 - **权限控制**:设置用户权限,仅授权用户访问和操作他们自己的文件。 5. **文件下载**: - **HTTP响应头设置**:在服务器端,需要设置`Content-...
在本场景中,我们讨论的问题是“文件上传问题”,这可能涵盖了多种技术点,包括前端表单提交、文件二进制处理、后端存储、错误处理等。接下来,我们将深入探讨这些关键知识点。 首先,前端的文件上传通常使用HTML5...