使用Azure客户端库上传文件到Blob Storage出现Content-Length错误求助
问题原因
@azure/storage-blob库的BlockBlobClient.upload()方法要求传入2个必填参数:第一个是要上传的二进制数据,第二个是数据的长度值。你当前代码仅传入了fs.readFileSync读取到的文件Buffer,没有传递长度参数,因此触发contentLength cannot be null or undefined报错。
另外你当前代码没有对异步的upload方法加await,最终打印的结果会是Promise对象而非上传响应。
解决方案
可任选以下任意一种方式修改:
方案1:补全upload方法的必填参数
修改上传相关代码如下:
// 读取文件获取Buffer const fileBuffer = fs.readFileSync('demo.xml') // 传入Buffer和Buffer长度,添加await处理异步逻辑 const uploadBlobResponse = await blockBlobClient.upload(fileBuffer, fileBuffer.length) console.log(uploadBlobResponse)
方案2:使用封装好的uploadFile方法(更推荐)
SDK提供了直接读取本地文件上传的uploadFile方法,无需手动读文件、手动计算长度,使用更简便:
// 替换原有的读文件+upload逻辑即可 const uploadBlobResponse = await blockBlobClient.uploadFile('demo.xml') console.log(uploadBlobResponse)
如果你的代码没有在async方法内,需要把上传逻辑包裹在async立即执行函数里才能使用await:
;(async function() { // 所有异步逻辑放在这里 const uploadBlobResponse = await blockBlobClient.uploadFile('demo.xml') console.log(uploadBlobResponse) })()
内容的提问来源于stack exchange,提问作者Mayank Patel
相关产品推荐
相关产品推荐

