如何从部署的服务器下载文件



有人能告诉我为什么当我在本地(通过localhost(工作时,下面的功能可以正确地从服务器下载我的文件,但当我尝试在远程服务器上部署我的应用程序时,却不能下载并返回我的500 internal server error吗?

async downloadFile(fileId: number): Promise<Buffer> {
const fileName = await this.getFileName(fileId);
const fileBuffer = await new Promise<Buffer>((resolve, reject) => {
fs.readFile(process.cwd() + '/files/' + fileName + '.xlsx', {}, (err, data) => {
if (err) reject(err)
else resolve(data)
});
});

return fileBuffer ;
}

感谢的帮助

编辑,日志错误:

ENOENT: no such file or directory

如果您愿意访问与脚本目录相对应的文件,则应使用__dirname

此外,使用路径模块以与平台无关的方式构建文件位置也是一种很好的做法。

const path = require('path')
const filePath = path.join(__dirname, 'files', `${fileName}.xlsx`)

process.cwd()指的是节点进程工作目录。在上下文中使用它会将代码与入口点的调用方式联系起来。这太糟糕了。只要有可能,代码就不必知道其执行上下文。

更好的方法是使文件位置可配置(使用环境变量或配置文件(,并通过这种方式将下载文件夹值传递给代码。

参见https://12factor.net/config

示例

const baseDir = process.env.FILES_PATH || '/some/default/location';
const filePath = path.join(baseDir, 'files', `${fileName}.xlsx`);

然后用运行你的程序

FILES_PATH=/your/directory node your_script.js

最新更新