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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:23:19