Php 如何将图像复制到AmazonS3?

Php 如何将图像复制到AmazonS3?,php,amazon-s3,copy,Php,Amazon S3,Copy,我在将图像复制到Amazon S3时遇到问题 我正在使用PHP复制功能将图像从一台服务器复制到另一台服务器。它在go daddy主机服务器上工作。但它不适用于S3。以下是不起作用的代码: $strSource =http://img.youtube.com/vi/got6nXcpLGA/hqdefault.jpg copy($strSource ,$dest); $dest是我的bucket url,其中包含用于上载图像的文件夹我不确定您是否可以像那样将图像复制到AWS。我建议使用一个与AW

我在将图像复制到Amazon S3时遇到问题

我正在使用PHP复制功能将图像从一台服务器复制到另一台服务器。它在go daddy主机服务器上工作。但它不适用于S3。以下是不起作用的代码:

$strSource =http://img.youtube.com/vi/got6nXcpLGA/hqdefault.jpg

copy($strSource ,$dest);

$dest是我的bucket url,其中包含用于上载图像的文件夹

我不确定您是否可以像那样将图像复制到AWS。我建议使用一个与AWS服务器对话的库,然后运行您的命令

检查这个-

它为AWS提供了一个
REST
实现

例如,如果要复制图像,可以执行以下操作:

$s3 = new S3($awsAccessKey, $awsSecretKey);
$s3->copyObject($srcBucket, $srcName, $bucketName, $saveName, $metaHeaders = array(), $requestHeaders = array());
$awsAccessKey
$awsSecretKey
是AWS a/c的密钥


查看并希望它能有所帮助。

不确定您是否使用过,但AWS SDK在这种情况下可以派上用场。SDK可以与IAM角色一起使用,以授予对S3存储桶的访问权。以下是步骤:

  • 修改代码以使用PHPSDK上载文件(如果需要)
  • 创建IAM角色并将该角色权限授予所需的S3存储桶
  • 启动EC2实例时,指定要使用该角色

  • 然后,您的代码将自动使用您授予该角色的权限。IAM提供SDK使用的实例临时凭据。IAM和EC2会自动为您旋转这些凭证

    以下是我在文档中复制S3 Bucket中对象的示例

    public function copyObject($sSourceKey, $sDestKey)
        {
            $this->checkKey($sSourceKey);
            $this->checkKey($sDestKey);
    
            $bRet = false;
    
            // http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_copyObject
            try {
                $response = $this->_oS3Client->copyObject(
                    array(
                        'Bucket' => $this->getBucketName(),
                        'Key' => $sDestKey,
                        'CopySource' => urlencode($this->getBucketName() . '/' . $sSourceKey),
                    )
                );
    
                if (isset($response['LastModified'])) {
                    $bRet = true;
                }
            } catch (Exception $e) {
    
                $GLOBALS['error'] = 1;
                $GLOBALS["info_msg"][] = __METHOD__ . ' ' . $e->getMessage();
                $bRet = false;
            }
    
            return $bRet;
        }
    

    你能澄清一下你的问题吗?您的意思是您已将服务器迁移到EC2吗?Edwin..是的,服务器已迁移到EC2。。在我的项目中,用户可以选择上传图像1)上传按钮2)从url导入,因此在从url导入的情况下,他们会给出图像url。我想在我的bucketOkay中复制此图像,我编辑了您的问题以澄清,以帮助其他人找到并回答它。您好,Pushpesh我使用了下面的代码,但它只适用于将图像从一个bucket复制到另一个$s3->copyObject($srcback,$srcName,$bucketName,$saveName,$metaHeaders=array(),$requestHeaders=array());我想把图像从任何服务器复制到bucket,你能帮我吗?对不起,我不明白你的问题。你能解释一下吗?在我的项目中,用户可以选择上传图片1)上传按钮2)从url导入。。从桌面上传图片可以正常工作,但如果从url导入,他们会给出图片url。我想在我的bucket$strSource=copy($strSource,$dest)中复制这个图像;好的,您可以执行
    $str=file\u get\u contents($strSource);文件内容(您的文件路径和名称,$str)。现在您可以将此文件上载到AWS,然后将其删除。希望对您有所帮助。我已经使用了上述代码,并收到警告[function.file put contents]:无法打开流:HTTP包装器不支持可写连接我也已将权限和图像复制到bucket