2015-06-10 4 views
15

Я загружаю файл в Amazon S3 с помощью SDK узла.Узел загрузки JS AWS S3. Как получить общедоступный URL-ответ

Загрузка файлов работает нормально, но я хочу, чтобы публичный URL-адрес файла отправлялся обратно клиенту.

На данный момент ответ я получаю:

Successfully uploaded data { ETag: '"957cd1a335adf5b4000a5101ec1f52bf"' } 

Вот мой код. Я использую сервер Node Express, и Multer обрабатывает закачки.

app.use(multer({ // https://github.com/expressjs/multer 
     dest: './public/uploads/', 
     limits : { fileSize:100000 }, 
     rename: function (fieldname, filename) { 
     var time = new Date().getTime(); 
     return filename.replace(/\W+/g, '-').toLowerCase() + time; 
     }, 
     onFileUploadData: function (file, data, req, res) { 
     // file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer } 
     var params = { 
      Bucket: creds.awsBucket, 
      Key: file.name, 
      Body: data, 
      ACL: 'public-read' 
     }; 

     var s3 = new aws.S3() 
     s3.putObject(params, function (perr, pres) { 
      if (perr) { 
      console.log("Error uploading data: ", perr); 
      } else { 
      console.log("Successfully uploaded data", pres); 
      } 
     }); 
     } 
    })); 

    app.post('/upload-image', function(req, res){ 
     if(req.files.file === undefined){ 
      res.send("error, no file chosen"); 
     } 
    }); 
+0

, как вы сделали это, чтобы работать, я получаю «Ошибка инициализации промежуточного TypeError: app.use() требует промежуточного программного обеспечения функций» сообщение – someUser

ответ

16

Использование upload вместо putObject. Она возвращает общественный URL в Адрес ключ

+3

Weird. 'putObject (...). prom()' отлично работает, но 'upload (...). prom()' undefined. Почему они это сделали. – Richard

+1

@Richard делает 'putObject (...). Prom()' возвращает общедоступный URL-адрес в ключе местоположения, поскольку я не могу найти его сам. Вот информация с июля 2016 года: обещания в настоящее время поддерживаются только для операций, возвращающих объект Request. Так как s3.upload - это настраиваемая функция, которая возвращает экземпляр ManagedUpload, а не Request, в настоящее время обеими обещаниями не поддерживается [ссылка] (https://github.com/aws/aws-sdk-js/issues/1076# issuecomment-235941953) – Marklar