从Azure Storage检索文件时遭遇ArgumentNullError问题求助
错误原因分析与解决方法
核心错误原因
报错ArgumentNullError: Required argument blob for function getBlobToLocalFile is not defined的直接原因是**blobName变量为undefined**。
前端通过POST请求将filename放在请求体中,但后端代码错误地从req.filename取值,正确的获取方式应为req.body.filename。
分步解决方法
1. 修正blobName的获取逻辑
修改后端displayFile函数中blobName的赋值代码:
// 错误写法 const blobName = req.filename; // 正确写法 const blobName = req.body.filename;
2. 修复本地文件路径问题
当前代码生成的downloadedFileName路径格式错误(例如test.pdf/CopyOftest.pdf),需使用标准路径拼接方式:
先引入必要模块:
const path = require('path'); const fs = require('fs');
再修改路径生成逻辑:
// 创建下载目录(不存在则自动创建) const downloadDir = path.join(__dirname, 'downloads'); if (!fs.existsSync(downloadDir)) { fs.mkdirSync(downloadDir, { recursive: true }); } // 生成合法的本地文件路径 const downloadedFileName = path.join(downloadDir, `CopyOf${blobName}`);
3. 给前端返回响应
当前后端完成Blob下载后未返回任何响应,会导致前端请求超时,需在回调中补充响应逻辑:
blobService.getBlobToLocalFile(containerName, blobName, downloadedFileName, function (error, serverBlob) { if (error) { console.error('Error downloading blob:', error); return res.status(500).json({ error: '文件下载失败' }); } // 将下载好的文件返回给前端 res.download(downloadedFileName, `CopyOf${blobName}`, (err) => { if (err) { res.status(500).json({ error: '文件发送失败' }); } // 可选:删除临时生成的本地文件 fs.unlinkSync(downloadedFileName); }); });
4. 额外检查项
- 确保后端已配置请求体解析中间件,否则
req.body会为空:
// 在Express应用配置中添加 app.use(express.json());
- 确认
azure-storage及依赖模块已正确引入:
const azure = require('azure-storage'); const util = require('util'); // 若使用util.format需引入
内容的提问来源于stack exchange,提问作者user16009462
相关产品推荐
相关产品推荐

