使用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类型,避免硬编码的局限性:
- 先安装依赖:
npm install mime-types - 修改后的代码:
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
相关产品推荐
相关产品推荐

