前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI后台开发基础(12): UploadFile的使用

FastAPI后台开发基础(12): UploadFile的使用

原创
作者头像
bowenerchen
发布2024-10-25 16:50:14
1250
发布2024-10-25 16:50:14
举报
文章被收录于专栏:编码视界

示例代码

代码语言:python
代码运行次数:0
复制
@app.post("/files/")
async def create_file(file: Annotated[bytes, File()]):
    """
    优势:
        简单直接:直接以字节形式接收文件,适用于处理小文件,因为它们可以直接加载到内存中。
    劣势:
        内存消耗:对于大文件,将整个文件内容加载到内存中可能会导致显著的内存消耗。
    """
    return {"file_size": len(file)}


@app.post("/uploadfile/")
async def create_upload_file(file: Annotated[UploadFile, File(...)]):
    """
    curl -X 'POST' 'http://127.0.0.1:18081/uploadfile/' -H 'accept: application/json' -H 'Content-Type: multipart/form-data' \
    -F 'file=@test.mp4;type=application/octet-stream'

    优势:
        内存效率:UploadFile 使用了“磁盘存储”,对于大文件,它不会将所有内容一次性加载到内存中,而是将文件存储在磁盘上的临时位置,这有助于减少内存消耗
        更多功能:UploadFile 提供了一些额外的方法和属性,如 save()、read()、write()、filename、content_type 等,这些可以帮助你更灵活地处理上传的文件
    劣势:
        稍微复杂:与直接使用字节数据相比,使用 UploadFile 需要更多的代码来处理文件(例如,读取、保存等操作)
    """
    h_sha256 = hashlib.sha256()  # 计算 SHA256
    h_sha3_512 = hashlib.sha3_512()  # 计算 SHA3-512
    h_sha512 = hashlib.sha512()  # 计算 SHA512
    read_data_count = 0  # 已读取的文件字节数

    ret = {"filename": file.filename,
           'content_type': file.content_type,
           'size_in_Byte': f'{file.size}Bytes',
           'size_in_KB': f'{file.size / 1024}KBs',
           'size_in_MB': f'{file.size / 1024 / 1024}MBs',
           'size_in_GB': f'{file.size / 1024 / 1024 / 1024}GBs',
           }
    print(ret)

    def update_hash(data: bytes):
        h_sha256.update(data)
        h_sha3_512.update(data)
        h_sha512.update(data)

    loop = asyncio.get_running_loop()
    # 以块的方式写入文件,适用于大文件
    while read_data_count < file.size:
        content = await file.read(1024 * 1024 * 5)  # 每次读取5MB
        read_data_count += len(content)
        await loop.run_in_executor(None, update_hash, content)
        if read_data_count >= file.size:
            break
    ret[h_sha256.name] = h_sha256.hexdigest()
    ret[h_sha512.name] = h_sha512.hexdigest()
    ret[h_sha3_512.name] = h_sha3_512.hexdigest()
    return ret
使用 File 上传文件
使用 File 上传文件
使用 UploadFile 上传文件
使用 UploadFile 上传文件

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例代码
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档