2013-12-17 94 views
1

我有一个上传表单,目前正在用户选择他/她想要的化身/图片。但是现在我正在整合facebook api,并且在使用FB Javascript SDK成功注册后,我将不得不将用户脸谱专页图片上传到我们的S3中。将图像自动上传到s3

<img src="https://fullpath/mypic.png" id="image"/> 

我已经研究过将图像转换为blob或其他东西。 那么如何自动上传mypic.png到我的s3?请任何帮助表示赞赏。

+0

我认为你需要做这在服务器端;因为浏览器将无法通过JavaScript访问不同域上的项目。这是为了防止跨站点脚本攻击。 – JeffryHouser

+0

@Reboog711你不需要做这个服务器端,请参阅下面的答案。请投票或批准,如果这个答案有助于你的原始海报。 – mattdlockyer

回答

-1

你不能从浏览器做到这一点,你需要一个服务器端脚本,它将接收你的上传并发送给s3。你在服务器端使用哪个框架?

+0

我们使用java作为后端。 – user2720708

+1

您不需要服务器端脚本,请参阅浏览器中的AWS JS SDK Javascript:http://aws.amazon.com/developers/getting-started/browser/ – mattdlockyer

1

使用AWS JS SDK。

这里是入门指南:http://aws.amazon.com/developers/getting-started/browser/

这其实很简单,一旦你的角色设置。

不需要服务器端代码!

当然,你首先需要获得的图像数据是这样的:

var canvas = document.createElement('canvas'); 
var context = canvas.getContext('2d'); 
canvas.width = 512; 
canvas.height = 512; 
context.drawImage(img, 0, 0, 512, 512); 
var data = canvas.toDataURL('image/webp', 0.5); //webp and 50% compression 

var params = { 
    Key:Date.now().toString(), //example 
    ContentType:'text/plain', //sending a base64 text string 
    Body:data //the base64 string is now the body 
}; 

bucket.putObject(params, function(err, data) { ... }); 
+0

请注意,此方法在IE9及更低版本中不适用。 –

+0

注意到,尽管AWS JS SDK有局限性,但我觉得这回答了原始问题,下面的答案是错误的。在OP的Java后端也很容易实现,但在这里你可以在客户端免费获得它。 – mattdlockyer

+0

那么,我应该给JS客户端写入我的S3存储桶所需的凭据?或者,我们是否应该为它提供一个用于书写的签名URL(如果可能的话) - 并且这需要来自服务器端。 – ZeissS