广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP aws-sdk-php文件存储的实现与应用
  • 271
分享到

PHP aws-sdk-php文件存储的实现与应用

php开发语言 2023-09-03 13:09:26 271人浏览 八月长安
摘要

前言 最近项目需要用到对象存储,将所有上传文件,存储到BOS云存储上。在开发过程中,遇到一些小小的问题,做个简单记录。 功能实现 1 下载sdk(以下两种方式,任选其一即可) (1)使用composer 安装 composer requi

前言

最近项目需要用到对象存储,将所有上传文件,存储到BOS云存储上。在开发过程中,遇到一些小小的问题,做个简单记录。

功能实现

1 下载sdk(以下两种方式,任选其一即可)

(1)使用composer 安装

composer require aws/aws-sdk-PHP

(2) 下载aws.phar

2 项目中使用,代码实现。

 'latest',        's3ForcePathStyle' => true,        'region' => $region,        'endpoint' => $endpoint,        'credentials' => [            'key' => $ak,            'secret' => $sk,        ],        // 'scheme' => 'http',        // 'debug' => true,    ]);    // Put data to S3 bucket    try    {        $key = '5.jpg';        $s3->putObject([            'Bucket' => $bucket,            'Key'    => $key,            'Body'   => fopen($key,"r"),        ]);    }    catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }    // GET Object    try    {        $result = $s3->getObject([            'Bucket' => $bucket,            'Key'    => $key        ]);        echo "\n---BEGIN---\n";        echo $result['Body'];        echo "\n----END----\n\n";    }    catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }    // GET Object head    try    {        $result = $s3->headObject([            'Bucket' => $bucket,            'Key'    => $key,        ]);        echo "\n---BEGIN---\n";        echo $result->get("LastModified");        echo $result->get("ContentLength");        echo $result->get("AcceptRanges");        echo "\n----END----\n\n";    }    catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }    // Delete object    try    {        echo 'Attempting to delete ' . $key . '...' . PHP_EOL;        $result = $s3->deleteObject([            'Bucket' => $bucket,            'Key'    => $key        ]);    }    catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrORMessage() . php_EOL);    }

注意:

(1)以下是我程序中功能实现部分,项目中我只用到了文件上传与文件删除,各位工友使用的话要调整自己的配置哟~

(2)本地图片上传与抓取远程图片上传是不一样的哟~

(3)上传文件时要注意设置'ACL' => 'public-read';

 'latest',    's3ForcePathStyle' => true,    'region' => $bosConfig['region'],    'endpoint' => $bosConfig['endpoint'],    'credentials' => [        'key' => $bosConfig['ak'],        'secret' => $bosConfig['sk'],    ],]);// 本地上传图片到bosfunction uploadToBos($filename,$filepath){    try    {        $s3result = $s3->putObject([            'Bucket' => $bosConfig['bucket'],            'Key'    => $filename,            'Body'   => fopen($filepath,"r"),            'ACL'    => 'public-read'        ]);    } catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }    $filePath = $s3result['ObjectURL'] ?? "";    return $filePath;}// 远程抓取图片上传bosfunction uploadOtherToBos($filename,$filepath){    $http = new Client();    $res = $http->request('GET',$filepath);    try    {        $s3result = $s3->putObject([            'Bucket' => $bosConfig['bucket'],            'Key'    => $filename,            'Body'   => $res->getBody(),            'ContentLength' => $res->getHeader('content-length')[0],            'ACL'    => 'public-read'        ]);    }  catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }    $filePath = $s3result['ObjectURL'] ?? "";    return $filePath;}// 删除远程bos图片function deleteBosFile($filename) {    try    {        $result = $s3->deleteObject([            'Bucket' => $bosConfig['bucket'],            'Key'    => $filename        ]);        return true;    }    catch (Aws\S3\Exception\S3Exception $e) {        exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);    }}

常见问题

(1)上传不成功,一直转圈。

对接过程中,发现上传没什么反应,一直转圈圈,这个问题我查了很多文档,一直找不到原因,困扰了我一天,百思不得其解。

原因 :

       endpoint 地址配置问题;

解决方案:
          查看 endpoint 地址是否配置正确;切记切记,要检查所有的配置,保证配置正确!!!

(2)Curl 77/60 等问题

原因:

        证书问题

解决方案:

        (1)安装相关证书;

        (2) 我这边证书搞定之后还是crl问题,于是把 endpoint 地址从"https"更改为"Http"就可以正常上传了;

(3)错误提示:payload content length is required and can not be calculated

原因:

        上传图片为链接,非本地图片

解决方案:

        (1)php 安装 guzzlehttp;
        (2)参考上述代码实现中的远程图片上传;

总结

工作累了,要适当划水~~~

划水同时,要多喝热水~~~

要运动保持好身体~~~

来源地址:https://blog.csdn.net/qq_32845825/article/details/128255725

--结束END--

本文标题: PHP aws-sdk-php文件存储的实现与应用

本文链接: https://www.lsjlt.com/news/392265.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作