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

使用Azure JS SDK v10上传图片无法设置content type为image/jpeg

解决Azure JS SDK v10上传图片Content-Type不正确的问题

我之前也碰到过一模一样的问题!你代码里的核心问题是参数传递顺序不符合SDK方法签名——uploadFile并不接受单独的aborter参数,它的第二个参数是一个整合所有配置的选项对象,aborter(准确来说是abortSignal)和blobHTTPHeaders都需要放在这个对象里。

你之前的写法把aborter作为第二个参数传入,又把配置对象作为第三个参数,这会导致你设置的blobContentType根本没有被SDK识别到,所以Content-Type一直停留在默认的application/octet-stream。

正确的代码示例

async function uploadLocalFile(aborter, containerClient, filePath, file_guid) {
  filePath = path.resolve(filePath); // 图片文件路径
  const fileName = file_guid; // 目标文件名
  const blobClient = containerClient.getBlobClient(fileName);
  const blockBlobClient = blobClient.getBlockBlobClient();
  
  // 将aborter和Content-Type配置合并到同一个选项对象中
  const uploadOptions = {
    abortSignal: aborter,
    blobHTTPHeaders: {
      blobContentType: 'image/jpeg'
    }
  };
  
  return await blockBlobClient.uploadFile(filePath, uploadOptions);
}

额外优化:自动识别文件类型

如果你的上传场景不只有JPG格式,推荐用mime-types库自动检测文件的MIME类型,避免硬编码的局限性:

  1. 先安装依赖:npm install mime-types
  2. 修改后的代码:
const mime = require('mime-types');

async function uploadLocalFile(aborter, containerClient, filePath, file_guid) {
  filePath = path.resolve(filePath);
  const fileName = file_guid;
  const blobClient = containerClient.getBlobClient(fileName);
  const blockBlobClient = blobClient.getBlockBlobClient();
  
  // 自动获取文件对应的MIME类型,兜底默认值
  const contentType = mime.lookup(filePath) || 'application/octet-stream';
  
  const uploadOptions = {
    abortSignal: aborter,
    blobHTTPHeaders: {
      blobContentType: contentType
    }
  };
  
  return await blockBlobClient.uploadFile(filePath, uploadOptions);
}

这样修改后,上传的图片就能正确设置对应的Content-Type了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:22:47