因业务需要,AWS S3 不能使用了,要换成阿里云OSS存储和下载。简单作以记录,以作备忘。

1.参照https://help.aliyun.com/product/31815.html?spm=5176.2020520105.146.d500.30285e77DhksTQ 开通OSS服务并创建存储空间,得到访问的域名endpoint、AccessKeyID和AccessKeySecret;

2. 下载PC端ossbrowser工具,验证bucket建立、文件创建、上传和下载等基本操作,确保第1步正常;基于aws s3的大黄鸭CyberDuck访问阿里云oss bucket,总是报错,应该是两家工具不兼容;

3. 代码移植

根据不同的开发语言,到https://help.aliyun.com/product/31815.html?spm=5176.2020520105.146.d500.30285e77DhksTQ的SDK参考中打开对应语言的页面,如本例中是php的,页面如https://help.aliyun.com/document_detail/32099.html?spm=5176.product31815.6.758.u4tuGR

3.a  下载最新的php sdk https://github.com/aliyun/aliyun-oss-php-sdk?spm=5176.doc32099.2.4.mSN0jX, 目前是2.2.4

3.b   构建本地php开发环境,修改SDK中sample下的Config.php,即第1步中的域名、ak/sk, 然后运行 SDK中 samples下的RunAll.php 即可看到各case都能正常运行

3.c  根据示例程序了解OSS API, 可以是这里的例子 https://help.aliyun.com/document_detail/32101.html?spm=5176.doc32100.6.760.hd9tYF, 也可以是SDK中samples下的各个*.php,使用最多的是Object.php中的几个接口。网页中的一些接口描述尤其是返回值与samples中的有出入,最好是看samples中的代码示例

3.d   把sdk放到应用的protected/extension/aliyun-oss目录下,不用把SDK全部文件都放进去,只需要放src下的OSS目录,及入口函数autoload.php即可,

  即  aliyun-oss

------  autoload.php

------- OSS/***

3.e  代码中遇到的问题及解决

  3.e.1  file upload failed  bucker_xx\/558be3c66aa2fda90452b6bc1acbd4d0

3.e.2   include(OssClient.php): failed to open stream:No such file or directory

3.e.3  "0:http body content is invalid:     上传size 为0的文件时,putObject会调用ossUtil::validateContent()对长度作判断,允许0长度文件时可以去掉此判断

\/OSS\/Core\/OssUtil.php:197:

\/OSS\/OssClient.php(978):OSS\\Core\\OssUtil::validateContent('''')\n
        3.e.4  "ret":"0:上传的文件不存在

     3.e.5   Error[8]: Trying to get property of non-object

3.e.6  "ret":"0:NoSuchKey: The specified keydoes not exist. RequestId: 5A39DB1D6FF1C5510C4153AF

3.e.7   Error[2]:filesize(): stat failed for file to be downloaded

3.e.8  通过浏览器下载文件要增加

      header('Content-Type: application/octet-stream');

      header('Content-Disposition: attachment; filename="'.$downloadName.'"');

针对各个问题,归纳起来原因,主要在于aws s3与aliyun oss的接口设计差异及返回值差异,相对来说,aws s3的接口设计及参数尤其返回值obj中包含的信息更详细更完整些(如obj->header, obj->body等),aliyun oss的就相对简单很多,返回的obj就是object的内容,不包含各种辅助信息。

具体实现的接口及调用接口:
getOssClient:
function getOssClient()
{require_once ROOT_PATH.'/protected/extensions/aliyun-oss/autoload.php';try {$client = new \OSS\OssClient(Yii::app()->params['aliyun.oss.key'],Yii::app()->params['aliyun.oss.secret'],Yii::app()->params['aliyun.oss.endpoint']);      //endpoint即第1步中的域名
    } catch (OssException $e) {print $e->getMessage();}   return $client;
}if (!$client->doesBucketExist(self::OSS_BUCKET_NAME)) {$ret = $client->createBucket(self::OSS_BUCKET_NAME, OssClient::OSS_ACL_TYPE_PRIVATE);} catch (OssException $e) {printf(__FUNCTION__ . ": FAILED\n");printf($e->getMessage() . "\n");return;}}catch(OssException $e) {printf(__FUNCTION__ . ": FAILED\n");printf($e->getMessage() . "\n");return;}file_put_contents($destFile, $obj, FILE_APPEND);      // getObject后在本地生成deskFile,可以再上传或导出。
调用sample:$client = getOssClient();}try {$ret = $client->putObject(self::OSS_BUCKET_NAME, $objName, file_get_contents($filename));try{$obj = $client->getObject($bucket, $objName);if(strlen($obj) > 0) {

从AWS S3换成阿里云OSS存储所踩的坑相关推荐

  1. mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...

  2. django图片上传到oss_django 配置阿里云OSS存储media文件的例子

    1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: ...

  3. tp5.0阿里云oss存储Demo

    序言:最近在做一个项目,关于的是投稿的项目,其实就是一个图片网站的问题,原本做的一直是将文件存放到服务器中,但现在由于用户越来越多,所以要将图片的路径更新到一个位置,所以阿里云oss存储就出来了. 首 ...

  4. 七牛云和阿里云OSS存储图片服务器使用

    目录 1 图片存储方案 1.1 介绍 1.2 七牛云存储 1.2.1 注册.登录 1.2.2 新建存储空间 1.2.3 查看存储空间信息 1.2.4 开发者中心 1.2.5 鉴权 1.2.6 Java ...

  5. 前端(react)上传到阿里云OSS存储 实例

    需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...

  6. 分布式文件存储——阿里云oss存储

    阿里云oss存储 目录 阿里云oss存储 获取设置参数 实现上传.下载方法 设置生命周期 获取设置参数 bucket名 endpoit key secret package configconst ( ...

  7. oss客户端工具_阿里云服务器ECS上使用ossfs工具挂载阿里云OSS存储

    介绍:阿里云对象存储服务(Object Storage Service,简称OSS)可以提供基于网络的数据存取服务.使用OSS,可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种非结构化 ...

  8. 图片上传到阿里云OSS存储

    首先我们需要申请阿里云账号 进行购买OSS云存储 一.开通"对象存储OSS"服务 申请阿里云账号.实名认证.进入管理控制台 二.创建Bucket 根据自身需求 ,一般选择标准存储 ...

  9. JAVA通过阿里云OSS存储实现图片上传功能

    一.前置准备 首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台 进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹)  关键是要 ...

最新文章

  1. 7、vue中将token存到cookie
  2. asp备份恢复mssql数据库的代码
  3. 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
  4. jQuery必知必熟基础知识
  5. ASP.NET Core SignalR中的流式传输
  6. 深入理解 Java 内存模型(一)——基础
  7. HbuilderX、Hbuilder编辑器如何使用手机调试app
  8. Java基础之写文件——使用Formatter对象加载缓冲区(UsingAFormatter)
  9. 五、会话及其会话技术
  10. python wechatpay微信支付回调_python服务器 实现app微信支付:支付异步通知
  11. TransposonPSI——转座子分析的入门自学
  12. 神经网络+CNN模型训练总结:
  13. linux内核系列之二_资源
  14. 模糊PID算法及其MATLAB仿真(2)
  15. polsarpro的开源代码_13个开源遥感软件包
  16. php 生成pdf 图片转pdf
  17. Matlab之min()、max()函数(求最小、最大值)
  18. 几经沉浮,人工智能(AI)前路何方?
  19. 2月9日,30秒知全网,精选7个热点
  20. apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)

热门文章

  1. Android5.0后外置SDCard读写
  2. android启动百度地图应用并开始导航,android打开外部地图导航(百度、高德、腾讯)...
  3. java 线程阻止_Java:在特定队列大小后阻止提交的ExecutorService
  4. python np.random.seed直观程序理解
  5. 耐威迪综合布线可视化管理软件与Visio在数据中心应用中的区别
  6. 用Python画樱花树的代码
  7. android 自动读取短息,Android实现短信验证码自动拦截读取功能
  8. 飞腾服务器如何查看cpu型号,飞腾cpu怎么样 飞腾cpu简介及对比评测【详解】
  9. Surface实现TF卡槽引导Ventoy加载Fydeos,不格式化硬盘,不重装Windows!
  10. android获取键盘状态,Android获取屏幕方向及键盘状态的小例子