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

使用Postman以form-data传图至Azure Blob Storage返回200但未存储,求解决

解决form-data格式上传Azure Blob Storage返回200但无文件的问题

核心原因

Azure Blob Storage的原生REST API(如Put Blob)不支持直接接收form-data格式的请求。你直接用form-data调用Blob API时,返回200仅代表请求被服务端接收,但实际上传的是form-data的结构化文本(包含边界、文件头信息等),并非真正的图片文件;甚至可能因格式不匹配,Blob服务未写入有效内容,导致容器内看不到图片。

必须的解决思路:通过中间服务中转

由于前端要求用form-data,需搭建中间服务接收form-data请求,解析出图片后再上传到Blob Storage。以下是两种低成本实现方案:

方案1:Azure Function中转(轻量快速)

  1. 创建HTTP触发的Azure Function,以Node.js为例:

    • 安装依赖:npm install multer @azure/storage-blob(multer用于解析form-data)
    • 编写Function代码:
      const multer = require('multer');
      const { BlobServiceClient } = require('@azure/storage-blob');
      const upload = multer({ storage: multer.memoryStorage() });
      
      module.exports = async function (context, req) {
          upload.single('file')(req, {}, async function(err) {
              if (err) {
                  context.res = { status: 400, body: '解析form-data失败' };
                  return;
              }
      
              if (!req.file) {
                  context.res = { status: 400, body: '未上传文件' };
                  return;
              }
      
              const blobServiceClient = BlobServiceClient.fromConnectionString(process.env.AZURE_STORAGE_CONNECTION_STRING);
              const containerClient = blobServiceClient.getContainerClient('你的容器名称');
              const blobClient = containerClient.getBlockBlobClient(req.file.originalname);
      
              await blobClient.uploadData(req.file.buffer, {
                  blobHTTPHeaders: { blobContentType: req.file.mimetype }
              });
      
              context.res = { status: 200, body: `文件上传成功:${req.file.originalname}` };
          });
      };
      
    • 在Function配置面板添加AZURE_STORAGE_CONNECTION_STRING(从Blob Storage的访问密钥页复制)
  2. Postman测试:

    • 请求方法:POST
    • 请求URL:Azure Function的触发地址
    • Body选择form-data,Key设为file,Type选File,Value选择本地图片
    • 发送请求后,即可在Blob容器中看到上传的图片

方案2:Azure App Service中转(适合复杂业务)

以Python Flask为例:

  1. 安装依赖:pip install flask azure-storage-blob
  2. 编写Flask代码:
    from flask import Flask, request
    from azure.storage.blob import BlobServiceClient
    
    app = Flask(__name__)
    CONNECTION_STRING = "你的Blob存储连接字符串"
    CONTAINER_NAME = "你的容器名称"
    
    @app.route('/upload', methods=['POST'])
    def upload_file():
        if 'file' not in request.files:
            return "未检测到上传文件", 400
        file = request.files['file']
        if file.filename == '':
            return "文件名不能为空", 400
    
        blob_service_client = BlobServiceClient.from_connection_string(CONNECTION_STRING)
        container_client = blob_service_client.get_container_client(CONTAINER_NAME)
        blob_client = container_client.get_blob_client(file.filename)
        blob_client.upload_blob(file, overwrite=True, content_type=file.content_type)
    
        return f"文件 {file.filename} 上传完成", 200
    
    if __name__ == '__main__':
        app.run()
    
  3. 部署到App Service后,用Postman以form-data格式请求/upload接口即可完成上传

额外排查点(若中转后仍失败)

  • 检查Blob容器权限:若使用连接字符串则无需调整;若用SAS令牌,需确保令牌包含写入权限
  • 检查文件大小限制:Azure Function默认最大请求100MB,大文件需修改Function的maxOutstandingRequests等配置
  • 查看服务端日志:在Azure Function/App Service的日志面板中排查是否有解析失败、Blob上传报错等信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:48:30