2013-10-24 3 views
0

Попытка загрузить изображение с помощью nodejs, выразить & модуль запроса, но продолжать получать 415 из экземпляра Amazon S3.NodeJS Request Загрузить изображение

fs.createReadStream(req.files.image.path).pipe(request.post(defaults.url, { 
     form: { 
      param_1: '', 
      param_2: '' 
     } 
    }, function(error, response, body){ 
     if(error){ 
      callback(error, null); 
     }else{ 

      if(response.statusCode === 200){ 

       callback({}, body); 

      }else{ 

       callback(body, response); 
      } 


     } 
    })); 

Я думаю, что изображение не добавляется к запросу, но я не на 100%. Есть рекомендации?

ответ

2

труба ожидает параметр 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 ? 
     } 
    });  
    }) 
}) 
+0

Спасибо Kamrul, ваш код работает, но я старался избегать использования aws apis. Мне удалось заставить его работать с плагином формы данных. – DanyZift

+0

@kamrul Я пробовал один и тот же код, я получаю сообщение об ошибке «TypeError: Не могу прочитать свойства« файлов неопределенных ». Я использую framework.fs. –

+0

@vivek, можете ли вы проверить, обрабатывается ли объект 'req' обработанным экспресс-файлом' files'. в противном случае проверьте свою экспресс-настройку нескольких частей. – Kamrul

Смежные вопросы