我正在尝试从AWS S3将音频(mp3)文件下载到本地计算机。当我在本地主机上执行时,但在将相同的代码部署到AWS之后,它工作正常。它将文件下载到服务器计算机而不是用户的本地计算机。
尝试了这两个版本。两者都以相同的方式
5
const key = track.audio_transcode_filename.substring(20);
var s3Client = knox.createClient(envConfig.S3_BUCKET_TRACKS);
const os = require('os');
const downloadPath = os.homedir().toString();
const config =require('../../config/environment');
const fs = require('fs');
var filePath=downloadPath + "\\Downloads\\" + track.formatted_title + ".mp3";
if (fs.existsSync(filePath)) {
var date = new Date();
var timestamp = date.getTime();
filePath=downloadPath + "\\Downloads\\" + track.formatted_title + "_" + timestamp + ".mp3";
}
const file = fs.createWriteStream(filePath);
s3Client.getFile(key, function(err, res) {
res.on('data', function(data) { file.write(data); });
res.on('end', function(chunk) { file.end(); });
});
谢谢, 坎特
答案 0 :(得分:1)
与其获取文件并再次发送给客户端,不如获取文件的网址并重定向客户端?
类似的东西:
s3Client.getResourceUrl(key, function(err, resourceUrl) {
res.redirect(resourceUrl);
)};
答案 1 :(得分:0)
您需要将其发送给用户。因此,我认为您有一个expressJS,用户可以使用您的API端点获取元素。
完成所有问题后,您需要将其发送给用户。
res.sendFile('/path/to/downloaded/s3/object')
答案 2 :(得分:0)
谢谢@Rashomon和@Martin do santos。 我必须添加客户端脚本以以下方式读取响应流并下载文件
downloadTrack(track).then((result) =>{
//var convertedBuffer = new Uint8Array(result.data);
const url = window.URL.createObjectURL(new Blob([result.data],{type: 'audio/mpeg'}));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', track.formatted_title + '.mp3');
document.body.appendChild(link);
link.click();
}, (error) =>{
console.error(error);
})