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

@azure/storage-blob uploadStream()仅上传42字节问题求助

问题原因与解决方案

核心问题是你错误地将文件路径字符串转换成了Buffer,而不是读取文件的实际内容。Buffer.from(filePath)只会把路径文本转成字节,这就是为什么上传的总是固定长度(路径字符串的长度)的内容。

修正步骤:

  • 用文件读取流获取真实文件内容,替代对路径字符串的处理
  • 正确获取文件实际大小,让上传逻辑能识别总字节数
  • 调整参数传递逻辑,确保媒体类型正确生效

修正后的代码:

const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");
const dotenv = require('dotenv');
const fs = require('fs');
const { stat } = require('fs/promises');

dotenv.config();

const account = process.env.STORAGE_ACCOUNT;
const accountKey = process.env.ACCOUNT_KEY;

const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const blobServiceClient = new BlobServiceClient(
    `https://${account}.blob.core.windows.net`, sharedKeyCredential
);

const containerName = process.env.CONTAINER_NAME;

const uploadFile = async(filePath, fileInfo) => {
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blobName = "vimeoVedio" + new Date().getTime();
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    
    // 创建文件读取流,读取真实文件内容
    const stream = fs.createReadStream(filePath);
    // 获取文件实际大小
    const fileStats = await stat(filePath);
    const fileSize = fileStats.size;
    
    const uploadBlobResponse = await blockBlobClient.uploadStream(
        stream,
        undefined, // 让SDK自动适配分块大小,或手动指定如4*1024*1024(4MB)
        400,
        {
            onProgress: (ev) => {console.log("progress", ev)},
            blobHTTPHeaders: {blobContentType: fileInfo.mimeType}
        }
    );
    return `Upload block blob ${blobName} successfully, requestId: ${uploadBlobResponse.requestId}`;
}

module.exports = {uploadFile}

关键修改说明:

  • 替换into-stream处理路径的逻辑为fs.createReadStream:直接读取文件的实际内容,而非路径字符串
  • 使用fs.promises.stat获取文件大小:让上传进度计算更准确,也符合SDK对已知流长度的优化逻辑
  • 移除错误的Buffer.from(filePath):彻底避免上传路径文本的问题
  • 可选调整分块大小:视频文件建议使用更大的分块(如4MB),提升上传效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:55:18