You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将二进制图片上传至Azure存储账户?代码问题排查

问题分析与解决

你的代码核心问题是误用了open()函数:open()需要接收文件路径字符串,但你传入的是UploadFile实例,这会直接导致报错,根本走不到读取字节的步骤。

修正后的代码

async def resolve_fileUpload(_, info, file):
    print(f"File - {type(file)}")

    container_client = blob_service_client.get_container_client('4160000000')
    if not container_client.exists():
        container_client.create_container()

    try:
        # 直接读取UploadFile实例的字节数据,注意用await(因为UploadFile的read是异步方法)
        file_content = await file.read()
        result = container_client.upload_blob(name='avatar', data=file_content)
        # 从返回结果中获取真实的文件URL,替换测试地址
        file_url = result.url
        return {
            "status": 200,
            "error": "",
            "fileUrl": file_url
        }
    except Exception as e:
        return {
            "status": 500,
            "error": str(e),
            "fileUrl": ""
        }

关键改动说明

  1. 移除错误的with open(file, "rb")代码块:UploadFile本身是封装好的上传文件对象,不需要再用open打开。
  2. 使用await file.read()获取字节数据:UploadFile的read()是异步方法(适配FastAPI/Starlette的异步IO模型),必须加await才能正确读取内容。
  3. 添加异常捕获:上传过程中可能出现网络错误、权限问题等,捕获异常后返回错误信息,方便排查问题。
  4. 替换测试URL:从upload_blob返回的BlobClient实例中可以获取真实的文件URL,比硬编码的测试地址更实用。

如果你的blob_service_client是同步客户端,可考虑用asyncio.to_thread()包裹上传逻辑,避免阻塞异步事件循环;若使用的是Azure异步Blob客户端则无需额外处理。

内容的提问来源于stack exchange,提问作者Sumchans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:04