通过CloudFront将内容上传到S3

4

我正在开发一个需要将图片上传到S3的应用程序。现在我的做法是这样的:

S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:nameOfThePicture inBucket:nameOfTheBucket];
    por.contentType = @"image/jpg";
    por.data        = imageData;

    // Put the image data into the specified s3 bucket and object.
    S3PutObjectResponse *putObjectResponse = [self.s3 putObject:por];
    por.delegate = self;

直接将图片上传到S3太慢了,我已经配置了CloudFront服务。现在,我想通过CloudFront将图片上传到S3中的原始桶。这种方式可行吗?如果可以,我该如何操作?
非常感谢, Victor
2个回答

5

不行。CloudFront只是单向的——你可以通过CloudFront从S3获取对象,但是你不能通过CloudFront向S3上传对象。


1
更新:这个变化发生在2013年10月。CloudFront现在会将HTTP PUT和POST命令(以及其他命令)传递到源站。据我所知,目前SDK中的S3 API还无法实现此功能。 - John Lemberger
我想象中,让所有的S3授权头正确通过可能会有问题。 - user149341

0

我在我的项目中也有同样的需求。虽然我自己不能完全理解所有内容,但我找到了一个链接。

http://raamdev.com/2008/using-curl-to-upload-files-via-post-to-amazon-s3/

我尝试用 PHP curl 模仿相同的操作,但不知何故我看到上传的是密钥而不是图像文件。如果有人能够弄清楚以下脚本中的问题,那么这段代码可能会为您提供指引,这将对我和任何想要实现此目标的人都有很大帮助。

$url = 'http://xxxxxxxxxxx.cloudfront.net/'; // cloudfront distribution url.

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 

//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("key"=>$_REQUEST['key'],"file"=>$_FILES['file']['tmp_name']));


//curl_setopt($ch, CURLOPT_POSTFIELDS, array("key"=>$_FILES['file']['tmp_name']));
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);

if (false == $result) {
    echo "Error while loading page: ", curl_error($ch), "\n"; 
}
curl_close($ch);
var_dump($result);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接