multipart/*阅读器从awsome'aiohttp'项目中提取,参见:http://aiohttp.readthedocs.org/en/stable/multipart.html。
multipart-reader的Python项目详细描述
允许读取多部分内容,如混合内容、相关内容等。
感谢aiohttp项目的实施,cf.: http://aiohttp.readthedocs.org/en/stable/multipart.html。不幸的是 人们还没有移动到asyncio,或者不想要完整的aiohttp堆栈 读取多部分内容。
在这里,我们试图保持所有的aiohttp逻辑和覆盖范围,但是协程 机制。
它的功能
它读取multpart/x内容的方式相同。假设我们有 多部分/相关内容:
>>> import json >>> from email.mime.multipart import MIMEMultipart >>> from email.mime.base import MIMEBase >>> multipart = MIMEMultipart('related') >>> part = MIMEBase('application', 'json') >>> part.set_payload(json.dumps({'foo': 'bar'})) >>> multipart.attach(part) >>> part = MIMEBase('application', 'octet-stream') >>> part.set_payload(b"Python will save the world. I don't know how. But it will.") >>> part.add_header('Content-Disposition', 'attachment', filename='python-save-the-world.txt') >>> multipart.attach(part)
下面是我们如何阅读的:
>>> import io >>> from multipart_reader import MultipartReader >>> content = multipart.as_string().split('\n\n', 1)[1] >>> headers = dict(multipart.items()) >>> stream = io.BytesIO() >>> stream.write(content) >>> stream.seek(0) >>> reader = MultipartReader(headers, stream) >>> json_part = reader.next() >>> json_part.json() {'foo': 'bar'} >>> file_part = reader.next() >>> file_part.read() "Python will save the world. I don't know how. But it will." >>> file_part.filename 'python-save-the-world.txt'
就这样……