使用Axios将CSV上传至Azure Blob Storage时遭遇403禁止错误
解决Azure Blob上传403禁止错误的方法
核心问题分析
你的代码存在两个关键错误导致403:
- 错误使用FormData:Azure Blob Storage的
Put Blob接口接受原始文件内容,不需要用FormData包装,multipart/form-data格式会被服务端拒绝。 - 头部配置冲突:FormData生成的
Content-Type会覆盖你需要的文件类型,且手动设置的Content-Length可能和实际文件大小不符。
修正后的代码
const fs = require('fs'); const path = require('path'); const axios = require('axios'); const BlobUriWithSASToken = 'https://myContainerName.blob.core.windows.net/folder1/folder2/folder3/folder4/mytestfile.csv?sv=<SAS Token>'; const filePath = path.join(__dirname, '/mytestfile.csv'); // 获取文件准确大小(可选,Axios也可自动计算) const fileStats = fs.statSync(filePath); const fileSize = fileStats.size; const request_config = { headers: { 'x-ms-blob-type': 'BlockBlob', 'Content-Type': 'text/csv', // 可根据文件类型调整,也可用application/octet-stream 'Content-Length': fileSize // 可选,手动设置更精准 }, }; try { const response = await axios.put( BlobUriWithSASToken, fs.createReadStream(filePath), // 直接传递文件流 request_config, ); console.log('上传成功,状态码:', response.status); } catch (err) { console.error('上传失败:', err.response?.status, err.response?.statusText); }
额外检查项
- SAS Token权限验证:确保SAS Token包含
Write(w)权限,资源类型覆盖Blob(b),且当前时间在Token有效期内。 - Blob路径正确性:确认URL中的容器名、文件夹路径、文件名完全正确,无拼写错误。
- 网络环境:如果在企业网络下,检查是否有防火墙或代理拦截了请求。
内容的提问来源于stack exchange,提问作者HelmBurger
相关产品推荐
相关产品推荐

