Моя цель:NodeJS Как загрузить файл на диск из ведра aws s3?
Показать диалоговое окно, предлагающее пользователю сохранить файл, загружаемый с aws.
Моя проблема:
настоящее время я использую awssum-амазонка-s3, чтобы создать поток загрузки. Однако мне удалось сохранить файл на моем сервере или передать его в командную строку ... Как вы можете видеть из моего кода, моя последняя попытка состояла в том, чтобы попытаться вручную установить заголовки несоответствий содержимого, которые не удались. Я не могу использовать res.download(), поскольку заголовки уже установлены?
Как я могу достичь своей цели?
Мой код для узла:
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!');
});
};
Цель этого кода, чтобы позволить пользователям использовать сгенерированный ключ для загрузки файла один раз.
К сожалению, вы не можете скачать файл на диск пользователя через запросы AJAX (см. [здесь] (http://stackoverflow.com/a/9970672/2137601) и [там] (http://stackoverflow.com/a/14683228/2137601), например). Вместо этого вы можете сделать команду POST FORM с данными 'dlKey'. –