Janz Blog

Janz Blog

aiohttp 上传文件的几种方式

62
2023-10-31

从本地文件上传

import asyncio
from aiohttp import ClientSession
from aiohttp.formdata import FormData

async def upload(file_path, file_name):
	async with ClientSession() as session:
		data = FormData()
        data.add_field(
            'file',
            Path(res_path).open(mode="rb"),
            filename=file_name
        )
        url = f''
        async with session.post( url, data=data) as resp:
            assert resp.status == 200

asyncio.run(upload(f'./test.jpeg', 'test.jpg'))

从文件流上传

这种方式不需要把文件保存到本地,采用流的方式进行传输。

import asyncio
from aiohttp import ClientSession
from aiohttp.formdata import FormData

async def upload_stream(res_url, url, file_name):
	async with ClientSession() as session:
		async with session.get(res_url) as r:
			data = FormData()
			data.add_field('file', r.content, filename=filename)
			async with session.post(url, data=data) as resp:
				assert resp.status == 200

asyncio.run(upload_stream(f'<res_url>', f'<upload_url>', 'test.jpg'))

Enjoy!

Client Quickstart — aiohttp 3.8.4 documentation