前言 最近项目需要用到对象存储,将所有上传文件,存储到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); }}
对接过程中,发现上传没什么反应,一直转圈圈,这个问题我查了很多文档,一直找不到原因,困扰了我一天,百思不得其解。
原因 :
endpoint 地址配置问题;
解决方案:
查看 endpoint 地址是否配置正确;切记切记,要检查所有的配置,保证配置正确!!!
原因:
证书问题
解决方案:
(1)安装相关证书;
(2) 我这边证书搞定之后还是crl问题,于是把 endpoint 地址从"https"更改为"Http"就可以正常上传了;
原因:
上传图片为链接,非本地图片
解决方案:
(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文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0