【问题标题】:Upload content to S3 through CloudFront通过 CloudFront 将内容上传到 S3
【发布时间】:2013-12-20 18:15:30
【问题描述】:

我正在开发一个需要将图像上传到 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 中的原始存储桶。有可能做到吗?如果是,我该怎么做?

非常感谢,

维克多

【问题讨论】:

    标签: ios objective-c amazon-s3 amazon-cloudfront


    【解决方案1】:

    没有。 CloudFront 是一种单向事务 - 您可以通过 CloudFront 从 S3 检索对象,但不能通过 CloudFront 将对象上传到 S3。

    【讨论】:

    • 更新:这在 2013 年 10 月发生了变化。CloudFront 现在将 HTTP PUT 和 POST 命令(以及其他命令)传递到源。 AFAICT 这在任何 SDK 中都不能通过 S3 API 工作。
    • 我认为让所有 S3 授权标头正确通过可能会有问题。
    【解决方案2】:

    我的项目中有同样的要求。虽然我自己无法弄清楚所有内容,但我发现了一个链接。

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2017-11-21
      • 2014-05-11
      • 2017-04-24
      • 2018-08-31
      相关资源
      最近更新 更多