如何使用 aiohttp 进行基于 multipartform-data 的异步文件上传?

2026-05-28 18:582阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计413个文字,预计阅读时间需要2分钟。

如何使用 aiohttp 进行基于 multipart/form-data 的异步文件上传?

前言:文件上传接口,POST请求,请求参数类型content-type: multipart/form-data,上传文件分为两种情况:小文件上传,可以直接使用open函数读取;大文件上传,可以使用aiohttp支持多种类型的文件以及流媒体格式的上传。

前言

文件上传接口,post 请求参数类型content-type:multipart/form-data,上传文件分2种情况

  • 小文件上传,可以直接用open函数读取
  • 大文件上传,aio127.0.0.1:8000') as session:
    files = {
    'file': open('a.jpg', 'rb'),
    'title': '文件上传'
    }
    async with session.post('/api/v1/upfile/', data=files) as resp:
    print(resp.url)
    print(await resp.text())


    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

    运行结果

    127.0.0.1:8000/api/v1/upfile/
    {"code":0,"msg":"success!","data":{"file":"/media/up_image/a_TEn5GLR.jpg","title":"文件上传","timestamp":"2022-04-21 11:15:28"}}

    使用 FormData 类

    FormData 类自定义文件类型和名称

    import aio49.235.92.12:7005') as session:
    data = FormData()
    data.add_field('file',
    open('a.jpg', 'rb'),
    filename='a.jpg',
    content_type='image/png')
    data.add_field('title', '文件上传1')
    async with session.post('/api/v1/upfile/', data=data) as resp:
    print(resp.url)
    print(await resp.text())


    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

    大文件上传

    小文件上传可以直接open函数读取,大文件直接读取会非常消耗内容。aiopython.org')
    await session.post('httpbin.org/post',
    data=resp.content)

    笔记 Python 3.5 没有对异步生成器的原生支持,使用 async_generator库作为解决方法。

    3.1 版后已弃用:aiohttp仍支持aiohttp.streamer装饰器,但不推荐使用此方法,而支持异步生成器,如上所示。



    如何使用 aiohttp 进行基于 multipart/form-data 的异步文件上传?


本文共计413个文字,预计阅读时间需要2分钟。

如何使用 aiohttp 进行基于 multipart/form-data 的异步文件上传?

前言:文件上传接口,POST请求,请求参数类型content-type: multipart/form-data,上传文件分为两种情况:小文件上传,可以直接使用open函数读取;大文件上传,可以使用aiohttp支持多种类型的文件以及流媒体格式的上传。

前言

文件上传接口,post 请求参数类型content-type:multipart/form-data,上传文件分2种情况

  • 小文件上传,可以直接用open函数读取
  • 大文件上传,aio127.0.0.1:8000') as session:
    files = {
    'file': open('a.jpg', 'rb'),
    'title': '文件上传'
    }
    async with session.post('/api/v1/upfile/', data=files) as resp:
    print(resp.url)
    print(await resp.text())


    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

    运行结果

    127.0.0.1:8000/api/v1/upfile/
    {"code":0,"msg":"success!","data":{"file":"/media/up_image/a_TEn5GLR.jpg","title":"文件上传","timestamp":"2022-04-21 11:15:28"}}

    使用 FormData 类

    FormData 类自定义文件类型和名称

    import aio49.235.92.12:7005') as session:
    data = FormData()
    data.add_field('file',
    open('a.jpg', 'rb'),
    filename='a.jpg',
    content_type='image/png')
    data.add_field('title', '文件上传1')
    async with session.post('/api/v1/upfile/', data=data) as resp:
    print(resp.url)
    print(await resp.text())


    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

    大文件上传

    小文件上传可以直接open函数读取,大文件直接读取会非常消耗内容。aiopython.org')
    await session.post('httpbin.org/post',
    data=resp.content)

    笔记 Python 3.5 没有对异步生成器的原生支持,使用 async_generator库作为解决方法。

    3.1 版后已弃用:aiohttp仍支持aiohttp.streamer装饰器,但不推荐使用此方法,而支持异步生成器,如上所示。



    如何使用 aiohttp 进行基于 multipart/form-data 的异步文件上传?