如何为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
相关产品推荐
相关产品推荐

