言十年的博客

上善若水,水善利萬物而不爭

物盡其用!人盡其才!兩全其美!


laravel5.2之使用AWS——S3

下载laravel 的 包 https://github.com/aws/aws-sdk-php-laravel (没有使用)

而是按照的下面这个教程

https://laravel.com/docs/master/filesystem

按照教程遇到了这个问题

S3Exception in WrappedHttpHandler.php line 192:
Error executing "PutObject" on "https://s3-eu-west-1.amazonaws.com/culiu.cdn/afp-wap/"; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

解决办法:

http://stackoverflow.com/questions/21114371/php-curl-error-code-60

下载保存成 .pem文件

配置下 php.ini 的选项

curl.cainfo = "E:\phpenv\xampp\php\path_to_cert\cacert.pem"

默认时区问题

默认us-east-1,这是个坑呀

会出现

FatalErrorException in CurlMultiHandler.php line 100: Maximum execution time of 30 seconds exceeded

于是我参考了

《 Amazon AWS 中国区的那些”坑”》 把时区改成了cn-north-1

于是文件夹创建成功了

上传文件到s3

封装一个简单的上传方法

function storageS3Put($fileName,$view) {

    $s3 = Storage::disk('s3');
    if (!$s3->exists('目录' )) {
        $s3->makeDirectory('目录/子目录' ); // 比如bucket下面我简历一个 yanshinian ,yanshinian下面建了一个static_html存放静态页
    }
$s3->url($fileName); //生成链接 https://s3.cn-north-1.amazonaws.com.cn/bucket/目录/子目录/xxx.html
    return $s3->put('目录/子目录/'.$fileName, $view->render());
}

我传递的$view 是资源型的所以,如果上传 $view 就说资源型的报错。其实要保存的是字符串,所以$view->render()渲染成字符串。

保存静态页到磁盘的方法(不是s3,这是框架带的)

File::put($filePath, $view) 是可以操作资源型的$view;

参考资料:

*《Amazon AWS 中国区的那些”坑”》http://www.jianshu.com/p/0d0fd39a40c9

分享到