труба ожидает параметр Writable в качестве параметра. вы можете использовать объект res express непосредственно в качестве адресата. Но если вы хотите, чтобы загрузить на s3, вы можете прочитать файл из REQ потока и использовать putObject, чтобы написать его s3
var fs = require ('fs')
fs.readFile(req.files.image.path, function (err, data) {
var AWS = require('./aws_config')
var s3 = new AWS.S3()
var bucket = ''
s3.putObject({
ACL: 'public-read', // by default private access
Bucket: bucket,
Key: file_name,
Body: data
}, function (err, data) {
if (err) {
console.log(err)
res.send(500, {msg: 'image upload failed', error: err})
} else {
console.log('S3 upload Successful')
res.send({})
}
});
для загрузки вы можете использовать трубу, чтобы перенаправить объект чтения для ответа непосредственно
Если вам нравится
app.get('/download/:file', function(req, res, next) {
var AWS = require('./aws_config')
var s3 = new AWS.S3()
s3.getObject({
Bucket: '',
Key: req.params.file
}, function (err, data) {
if (err) console.log (err)
var fs = require ('fs')
var filePath = __dirname + "/downloads/" + req.params.file
fs.writeFile(filePath, data.Body, function (err) {
if (err) console.log(err)
else {
res.attachment(filePath)
var filestream = fs.createReadStream(filePath);
filestream.pipe(res);
// TODO: delete file from server ?
}
});
})
})
Спасибо Kamrul, ваш код работает, но я старался избегать использования aws apis. Мне удалось заставить его работать с плагином формы данных. – DanyZift
@kamrul Я пробовал один и тот же код, я получаю сообщение об ошибке «TypeError: Не могу прочитать свойства« файлов неопределенных ». Я использую framework.fs. –
@vivek, можете ли вы проверить, обрабатывается ли объект 'req' обработанным экспресс-файлом' files'. в противном случае проверьте свою экспресс-настройку нескольких частей. – Kamrul