如何在yii2中自定义s3上传的文件网址?

时间:2018-02-16 04:04:27

标签: php amazon-s3 yii2

我使用了vlaim\fileupload\FileUpload;yii\web\UploadedFile;

$image = UploadedFile::getInstance($model, 'flag');
            $model->flag = new FileUpload(FileUpload::S_S3, [
                'version' => 'latest',
                'region' => 'us-west-2',
                'credentials' => [
                    'key' => 'KEY',
                    'secret' => 'SECRET'
                ],
                'bucket' => 'mybucket/uploads/flags/'.$model->code
            ]);
            $uploader = $model->flag;
            $model->flag = $uploader->uploadFromFile($image)->path;

在db中我正在保存路径。如何自定义网址?

现在我的网址看起来像https://s3-us-west-2.amazonaws.com/mybucket%2Fuploads%2Fflags%2Fus/uploads%5C9f%5C7e%5Cc093ad5a.png

我需要像https://mybucket.s3.amazonaws.com/uploads/flags/us.png

这样的网址

1 个答案:

答案 0 :(得分:1)

S3没有文件夹的概念,它是一个具有键/值对的对象存储。它们对您的文件的关键是uploads/flags/us.png

使用PHP SDK可以轻松设置对象的键。

$USAGE = "\n" .
    "To run this example, supply the name of an S3 bucket and a file to\n" .
    "upload to it.\n" .
    "\n" .
    "Ex: php PutObject.php <bucketname> <filename>\n";
if (count($argv) <= 2){
    echo $USAGE;
    exit();
}
$bucket = $argv[1];
$file_Path = $argv[2];
$key = basename($argv[2]);
try{
    //Create a S3Client
    $s3Client = new S3Client([
        'region' => 'us-west-2',
        'version' => '2006-03-01'
    ]);
    $result = $s3Client->putObject([
        'Bucket'     => $bucket,
        'Key'        => $key,
        'SourceFile' => $file_Path,
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

yii2我认为您需要设置setFsUrl()

http://www.yiiframework.com/extension/yii2-file-upload/#hh8

setFsUrl(string $url)

(Only for Local mode)

Sets url. For example, if you set path to 'http://static.example.com' file after uploading will have URL http://static.example.com/path/to/your/file

Default to /

php $uploader->setFsPath('http://pathtoyoursite.com');