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

如何为Node.js中Box API的下载函数设置默认文件夹?

解决Box SDK下载文件到项目子文件夹的问题

你不需要在Box SDK里找对应配置参数——文件的本地保存路径完全由你本地的文件写入流控制,只需要修改fs.createWriteStream的目标路径,把文件名替换成「子文件夹路径+文件名」即可,同时要提前确保子文件夹存在,否则会抛出写入错误。

修改后的代码示例

const fs = require('fs');
const path = require('path'); // 引入path模块处理跨系统路径

async function downloadBoxFile(fileID, fileName) {
  try {
    // 加载配置
    const config = loadConfiguration();
    const { clientID, clientSecret, enterpriseID } = config.boxConfiguration;

    // 认证Box客户端
    const boxClient = boxAuthentication(clientID, clientSecret, enterpriseID);        

    const fileReadStream = await boxClient.files.getReadStream(fileID, null, {
      fields: 'modified_at, size, sha1, owned_by'
    });

    // 定义要保存的子文件夹(比如项目根目录下的downloads文件夹)
    const targetSubFolder = './downloads';
    // 确保子文件夹存在,不存在则自动创建(支持多级嵌套目录)
    if (!fs.existsSync(targetSubFolder)) {
      fs.mkdirSync(targetSubFolder, { recursive: true });
    }
    // 拼接子文件夹路径与文件名,生成完整本地路径
    const fullSavePath = path.join(targetSubFolder, fileName);

    const writeStream = fs.createWriteStream(fullSavePath);
    fileReadStream.pipe(writeStream);

    return new Promise((resolve, reject) => {
      fileReadStream.on('end', () => {        
        writeStream.close(); // 手动关闭写入流,避免文件未完全写入
        writeLog('> 文件下载成功:' + fullSavePath);
        resolve();
      });
      fileReadStream.on('error', (error) => {
        console.log('文件下载错误:', error);
        writeLog('文件下载错误:', error);
        reject(error);
      });
    });
  } catch (error) {
    console.log('文件下载错误:', error);
    writeLog('文件下载错误:', error);
    throw error;
  }
}

关键细节说明

  • 用path.join()拼接路径可以自动适配Windows和Linux的路径分隔符差异,避免手动拼接出现错误
  • fs.mkdirSync的recursive: true参数会自动创建所有不存在的父级目录,比如你指定./a/b/c,即使a、b都不存在也会一次性创建
  • 下载完成后关闭写入流是好习惯,能避免因流未闭合导致的文件损坏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:42:10