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

使用Node.js+Express.js上传文件至Azure Blob Storage时遇错误

问题分析与解决方案

核心问题

你的代码直接将multer返回的整个文件对象传给了blockBlobClient.upload方法,但该方法仅接受文件原始数据(Buffer或可读流),而非包含元数据的完整对象,这是上传失败的主要原因。此外代码还有几处细节需要修正。

修正后的代码

const addProductImage = async (req: any, res: Response) => {
    try {
        console.log(req.files.file);

        // 完善文件存在性检查,添加return避免后续代码执行
        if (!req.files || !req.files.file) {
            return res.status(400).send({ status: Status.ERROR, error: "No file uploaded" });
        }

        const file = req.files.file;
        const sharedKeyCred = new StorageSharedKeyCredential(accName, acckey);
        const blobServClient1 = new BlobServiceClient(`https://${accName}.blob.core.windows.net`, sharedKeyCred);
        const containerClient1 = blobServClient1.getContainerClient(containerName);
        const blockBlobClient = containerClient1.getBlockBlobClient(file.name);
        
        // 使用文件的Buffer数据(file.data)上传,而非整个file对象
        await blockBlobClient.upload(file.data, file.size, {
            blobHTTPHeaders: {
                blobContentType: file.mimetype // 正确设置文件MIME类型
            }
        });

        res.status(200).send({ status: Status.SUCCESS });
    } catch (error: any) {
        // 返回具体错误信息,便于排查
        res.status(500).send({ 
            status: Status.ERROR, 
            error: error.message || "Upload failed" 
        });
    }
}

关键修正点

  • 上传数据修正:将await blockBlobClient.upload(file, file.size)改为await blockBlobClient.upload(file.data, file.size),file.data是文件的Buffer数据,符合Azure Blob上传方法的参数要求。
  • 完善文件检查逻辑:同时校验req.files和req.files.file是否存在,并添加return终止后续代码执行,避免无意义的错误。
  • 设置Blob内容类型:通过blobHTTPHeaders配置文件的MIME类型,确保存储的Blob有正确的内容标识。
  • 优化错误反馈:捕获错误时返回error.message而非整个错误对象,更直观地展示问题原因。

Postman请求验证要点

确保Postman请求配置正确:

  • 请求方法:POST
  • 请求体类型:form-data
  • 键名:file(需与代码中req.files.file的键名完全一致)
  • 值类型选择:File,再选择本地的图片/视频文件

内容的提问来源于stack exchange,提问作者Abhishek Konnur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:25:30