从AWS S3换成阿里云OSS存储所踩的坑
因业务需要,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存储所踩的坑相关推荐
- mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储
1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...
- django图片上传到oss_django 配置阿里云OSS存储media文件的例子
1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: ...
- tp5.0阿里云oss存储Demo
序言:最近在做一个项目,关于的是投稿的项目,其实就是一个图片网站的问题,原本做的一直是将文件存放到服务器中,但现在由于用户越来越多,所以要将图片的路径更新到一个位置,所以阿里云oss存储就出来了. 首 ...
- 七牛云和阿里云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 ...
- 前端(react)上传到阿里云OSS存储 实例
需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...
- 分布式文件存储——阿里云oss存储
阿里云oss存储 目录 阿里云oss存储 获取设置参数 实现上传.下载方法 设置生命周期 获取设置参数 bucket名 endpoit key secret package configconst ( ...
- oss客户端工具_阿里云服务器ECS上使用ossfs工具挂载阿里云OSS存储
介绍:阿里云对象存储服务(Object Storage Service,简称OSS)可以提供基于网络的数据存取服务.使用OSS,可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种非结构化 ...
- 图片上传到阿里云OSS存储
首先我们需要申请阿里云账号 进行购买OSS云存储 一.开通"对象存储OSS"服务 申请阿里云账号.实名认证.进入管理控制台 二.创建Bucket 根据自身需求 ,一般选择标准存储 ...
- JAVA通过阿里云OSS存储实现图片上传功能
一.前置准备 首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台 进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹) 关键是要 ...
最新文章
- 7、vue中将token存到cookie
- asp备份恢复mssql数据库的代码
- 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
- jQuery必知必熟基础知识
- ASP.NET Core SignalR中的流式传输
- 深入理解 Java 内存模型(一)——基础
- HbuilderX、Hbuilder编辑器如何使用手机调试app
- Java基础之写文件——使用Formatter对象加载缓冲区(UsingAFormatter)
- 五、会话及其会话技术
- python wechatpay微信支付回调_python服务器 实现app微信支付:支付异步通知
- TransposonPSI——转座子分析的入门自学
- 神经网络+CNN模型训练总结:
- linux内核系列之二_资源
- 模糊PID算法及其MATLAB仿真(2)
- polsarpro的开源代码_13个开源遥感软件包
- php 生成pdf 图片转pdf
- Matlab之min()、max()函数(求最小、最大值)
- 几经沉浮,人工智能(AI)前路何方?
- 2月9日,30秒知全网,精选7个热点
- apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)
热门文章
- Android5.0后外置SDCard读写
- android启动百度地图应用并开始导航,android打开外部地图导航(百度、高德、腾讯)...
- java 线程阻止_Java:在特定队列大小后阻止提交的ExecutorService
- python np.random.seed直观程序理解
- 耐威迪综合布线可视化管理软件与Visio在数据中心应用中的区别
- 用Python画樱花树的代码
- android 自动读取短息,Android实现短信验证码自动拦截读取功能
- 飞腾服务器如何查看cpu型号,飞腾cpu怎么样 飞腾cpu简介及对比评测【详解】
- Surface实现TF卡槽引导Ventoy加载Fydeos,不格式化硬盘,不重装Windows!
- android获取键盘状态,Android获取屏幕方向及键盘状态的小例子