gpt4 book ai didi

node.js - NodeJS 如何从 aws s3 存储桶将文件下载到磁盘?

转载 作者:IT老高 更新时间:2023-10-28 22:00:13 56 4
gpt4 key购买 nike

我的目标:

显示一个对话框,提示用户保存从 aws 下载的文件。

我的问题:

我目前正在使用 awssum-amazon-s3 创建下载流。但是,我只设法将文件保存到我的服务器或将其流式传输到命令行...正如您从我的代码中看到的那样,我最后一次尝试是尝试手动设置失败的内容处置 header 。我不能使用 res.download() 因为已经设置了 header ?

我怎样才能实现我的目标?

我的 Node 代码:

app.post('/dls/:dlKey', function(req, res, next){
// download the file via aws s3 here
var dlKey = req.param('dlKey');

Dl.findOne({key:dlKey}, function(err, dl){
if (err) return next(err);
var files = dl.dlFile;

var options = {
BucketName : 'xxxx',
ObjectName : files,
};

s3.GetObject(options, { stream : true }, function(err, data) {
// stream this file to stdout
fmt.sep();
data.Headers['Content-Disposition'] = 'attachment';
console.log(data.Headers);
data.Stream.pipe(fs.createWriteStream('test.pdf'));
data.Stream.on('end', function() {
console.log('File Downloaded!');
});
});
});

res.end('Successful Download Post!');
});

我的角度代码:

$scope.dlComplete = function (dl) {
$scope.procDownload = true;
$http({
method: 'POST',
url: '/dls/' + dl.dlKey
}).success(function(data/*, status, headers, config*/) {
console.log(data);
$location.path('/#!/success');
}).error(function(/*data, status, headers, config*/) {
console.log('File download failed!');
});
};

此代码的目的是让用户使用生成的 key 下载文件一次。

最佳答案

这是在最新版本的 aws-sdk 上使用流式传输的整个代码

var express = require('express');
var app = express();
var fs = require('fs');

app.get('/', function(req, res, next){
res.send('You did not say the magic word');
});


app.get('/s3Proxy', function(req, res, next){
// download the file via aws s3 here
var fileKey = req.query['fileKey'];

console.log('Trying to download file', fileKey);
var AWS = require('aws-sdk');
AWS.config.update(
{
accessKeyId: "....",
secretAccessKey: "...",
region: 'ap-southeast-1'
}
);
var s3 = new AWS.S3();
var options = {
Bucket : '/bucket-url',
Key : fileKey,
};

res.attachment(fileKey);
var fileStream = s3.getObject(options).createReadStream();
fileStream.pipe(res);
});

var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('S3 Proxy app listening at http://%s:%s', host, port);
});

关于node.js - NodeJS 如何从 aws s3 存储桶将文件下载到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22143628/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com