Amazon AWS S3 for PHP 的API使用测试

1.php> 使用背景:

开发环境:thinkphp框架

官网手册好和官方S3的API:
http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html
http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html

2.php> 过程简述:

  1. 创建AWS账户,免费注册,可免费使用一年(当然是最低级的功能试用)
  2. 根据账户创建KEY和ID
  3. 框架中引入AWS的SDK
  4. 用创建的KEY和ID实例化S3类: Aws\S3\S3Client
  5. 现在你就可以用他进行各种操作:上传、下载、删除、访问等等

3.php> 主要说一下这个地方我遇到的问题:

  • 导入SDK包:

          因为其自带命名空间且与Thinkphp里的空间不能融合,也与其命名规范不相容,所以自能作为第三方类库,放在文件夹\Library\Vendor中,这里需要用到php里的自动加载(autoload)机制:
    在使用的函数开头首先使用

require_once("../inc/aws/aws-autoloader.php"); 

    对应的加载原理:

spl_autoload_register(function ($class) use ($mapping) {
    if (isset($mapping[$class])) {
        require $mapping[$class];
    }
}, true);

     插一句题外话,php的debug功能还不是很完善,楼主也是个半吊子,开始引入时一直超时,我以为是自动加载机制出现的问题,折腾了一天,把php命名空间和自动加载以及thinkphp的第三方类库翻了一遍,最后令楼主吐血的是,居然是IAM没有开相应的S3权限,IAM在创建的时候默认是没有权限的,所以最后找到原因后,楼主郁闷了好久,而且一定要保证网速好,这也是另一个血的教训。。。。

所以

IAM要开通相应的权限
网速牛逼,这样才能专心修改程序问题,要不然会被弄得相当糊涂

  • 跨域请求(CORS):

网站涉及用JS远程调用,查过好多方案不说了,说解决方案:
想到S3作为专门的远程存储桶,那么它必然会有跨域请求的问题,果然可以直接在S3的控制台配置
进入S3的console->Properties->Permissions->Edit CORS Configuration

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

这是一个XML,这样所有的GET过来的请求响应,就不会被浏览器拦截,当然我们也可以设置更多的rule,来适配各种需求,问题就解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鸳鸯锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值