2017-06-06 135 views
1

我签我的服务器上的URL,并发送回其正常工作时客户端。这是函数的样子获得400错误的请求试图上传到AWS的S3存储

const aws = require('aws-sdk'), 
    config = require('config'), 
    crypto = require('crypto'); 


module.exports = async function(file_type) { 

    aws.config.update({accessKeyId: config.AWS_ACCESS_KEY, secretAccessKey: config.AWS_SECRET_KEY}) 

    const s3 = new aws.S3(); 

    try { 
     if (!file_type === "image/png") { 
      return ({success: false, error: 'Please provide a valid video format'}); 
     } 
     let buffer = await crypto.randomBytes(12); 

     let key = buffer.toString('hex'); 

     let options = { 
      Bucket: config.AWS_S3_BUCKET, 
      Key: key, 
      Expires: 60, 
      ContentType: file_type, 
      ACL: 'public-read', 
     } 

     let data = await s3.getSignedUrl('putObject', options); 
     console.log('data was', data) 
     return ({ 
      success: true, 
      signed_request: data, 
      url: ('https://s3.amazonaws.com/' + config.AWS_S3_BUCKET + '/' + key), 
      key, 
     }); 
    } catch (error) { 
     console.log('the error was', error) 
     return ({ 
      success: false, 
      error: error.message, 
     }) 
    } 
} 

所以这工作正常,并卷起让我一个网址,像

https://mybucket.s3.amazonaws.com/a33b4a43f23fc41de9ddck1k?AWSAccessKeyId=ADIFJDGPMRFRGLXSYWPQ&Content-Type=image%2Fpng&Expires=1496716543&Signature=0zcx%2BFzWUoeFD02RF2CQ2o0bLmo%3D&x-amz-acl=public-read

然后,当我得到这个URL后面的客户端上..我使用axios发送PUT请求,其功能类似于 -

function uploadToS3(file, signedRequest, callback){ 

    var options = { 
     headers: { 
      'Content-Type': file.type 
     } 
    }; 

    axios.put(signedRequest, file, options) 
     .then(result =>{ 
      console.log('the result was', result) 
      callback(result) 
     }) 
     .catch(err =>{ 
      callback(err) 
     }) 

} 

唯一我得到的回复是(400)错误的请求

回答

0

猜你为我

function upload(file, signedRequest, done) { 
    const xhr = new XMLHttpRequest(); 
    xhr.open('PUT', signedRequest); 
    xhr.setRequestHeader('x-amz-acl', 'public-read'); 
    xhr.onload =() => { 
    if (xhr.status === 200) { 
     done(); 
    } 
    }; 

    xhr.send(file); 
} 
+0

提供

作品,我试图用Axios公司做不好的头。以上就是我用来做什么的,所以我只是用它去再次笑 – joe