如何在使用PHP处理后直接将外部图像上传到S3

时间:2016-12-21 10:22:45

标签: php amazon-web-services file-upload amazon-s3

我想为用户提供直接上传功能。我的意思是不是从他们的电脑上传,他们也应该从外部源(完整的网址到img将是我的来源)上传图像到我的Amazon S3存储桶。

但我的服务真的很重。如果我将图像保存到我的VPS,在S3上传之前,这将终止我的VPS服务器。在上传到S3之前,我可以直接上传而不保存文件。

我可以检查远程源上的大小,扩展名等吗?

目前使用此脚本,他们只会上传一个上传表单。

function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
}
//Here you can add valid file extensions.
$valid_formats = array("jpg", "png", "gif", "bmp","jpeg","PNG","JPG","JPEG","GIF","BMP");

$msg='';
if($_SERVER['REQUEST_METHOD'] == "POST")
{
    $name = $_FILES['file']['name'];
    $size = $_FILES['file']['size'];
    $tmp = $_FILES['file']['tmp_name'];

    print_r($_FILES);
    $ext = getExtension($name);

    if(strlen($name) > 0) {
// File format validation
        if(in_array($ext,$valid_formats)) {
// File size validation
            if($size<(1024*1024)) {
                include('amazons3/s3_config.php');
//Rename image name.
                $actual_image_name = time().".".$ext;

                if($s3->putObjectFile($tmp, $bucket , $actual_image_name, S3::ACL_PUBLIC_READ) ) {
                    $msg = "S3 Upload Successful.";
                    $s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
                    echo "<img src='$s3file'/>";
                    echo 'S3 File URL:'.$s3file;
                }
                else {
                    $msg = "S3 Upload Fail.";
                }

            }
            else {
                $msg = "Image size Max 1 MB";
            }
        }
        else {
            $msg = "Invalid file, please upload image file.";
        }

    }
    else {
        $msg = "Please select image file.";
    }
}

我应该如何通过网址上传来实现?

如何控制图像的扩展名,大小等,就像我当前的验证一样?

0 个答案:

没有答案