首页 > 解决方案 > 如何通过nodejs(通过heroku)下载文件并将它们存储到s3?

问题描述

我想知道如何通过heroku将文件下载到aws-s3,并且不使用网页。

我在 Nodejs 中使用 wget 下载音频文件,并希望通过 ffmpeg 重新编码它们。虽然我必须先存储文件,但 heroku 没有提供存储空间。然后我找到了heroku可以与aws-s3连接的方式,但是示例代码是用户上传的页面,我只想使用代码。

这是尚未与 s3 连接的代码。

  const wget = spawn('wget',['-O', 'upload_audio/'+ sender_psid +'.aac', audioUrl]);
  //spit stdout to screen
  wget.stdout.on('data', function (data) { process.stdout.write(data.toString()); });
  // //spit stderr to screen
  wget.stderr.on('data', function (data) { process.stdout.write(data.toString()); });

  wget.on('close', function (code) {

    console.log(process.env.PATH);
    const ffmpeg = spawn('ffmpeg',['-i', 'upload_audio/'+ sender_psid +'.aac', '-ar', '16000', 'upload_audio/'+ sender_psid +'.wav', '-y']);

...

});

它出现了错误:

upload_audio/1847432728691358.aac: No such file or directory
...
Error: ENOENT: no such file or directory, open 'upload_audio/1847432728691358.wav'

我该如何解决这个问题?有人可以给一些建议吗?也许不会使用 s3 可以得到它?

标签: javascriptnode.jsherokuamazon-s3

解决方案


在您尝试过 NodeJS 静态文件 API 之前,我不建议您使用 S3。在服务器上,它看起来像这样:

app.use(express.static(path.join(__dirname, 'my_audio_files_folder')));

有关 NodeJS 的静态文件 API 的更多信息,请点击此处

AWS S3 似乎增加了不必要的复杂性,但如果您有心,请查看此线程


推荐阅读