android 阿里云oss上传
购买了阿里云的oss空间,于是用它来存储图片,不过中间的使用算是出了些问题,导致很长的才成功。
不得不说,阿里云文档真的是无力吐槽。。。乱七八糟的。我完全是东拼西凑,才完成的图片上传功能。
走了很多的弯路,今天来记录下。
服务器上传:
阿里云上传分服务器上传和客户端上传,首先要分清,因为两边有差别的,服务器的上传简单很多,官方给的下载下来,输入配置的参数accessKeyId 和 accessKeySecret 还有bucketName 就能够上传成功,很简单,这里也就不细说了。
客户端上传:
这里着重来讲下客户端上传,因为它更加的麻烦 和繁琐一些。
教程的全篇都会讲一句话,移动端是不受信任的环境,我的个人理解是,apk是个比较好被反编译的,所有,如果将很多秘钥写到APP中,就会存在泄露的问题。所以,像上面服务器上传那样,直接在代码里面写accessKeyId 和 accessKeySecret,肯定是不安全的。所以,客户端上传,有两个东西子知识点要去了解。

1.访问用户RAM管理
这里需要进行用户的分配,分配一个专门操作阿里云 OSS的用户,并给予该用户应有的权限。
2.STS鉴权模式

OSS可以通过阿里云STS服务,临时进行授权访问。阿里云STS (Security Token Service) 是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或联邦用户(用户身份由您自己管理)颁发一个自定义时效和权限的访问凭证
我的理解就是:用分配的用户的秘钥去操作单个步骤,实现权限的分配管理。
开始准备工作
1:用户RAM管理
创建RAM:步骤参考文档。就是到《访问控制RAM》去设置子用户,并分配给子用户权限。
https://ram.console.aliyun.com/?spm=5176.2020520153.aliyun_sidebar.11.7f5a43f7vo9spw&accounttraceid=dfef632a-67d6-4f51-a3ff-beea37b5db73#/overview
2.进入对象储存的控制台,创建对应的AK。
对象储存 - 安全令牌-安全令牌快捷配置 - 开始授权,
授权成功后,会出来一系列参数AccessKeyID 和 AccessKeySecret 和 RoleArn ,这些比较重要,需要在请求中用于授权,不要泄露。
3.准备STS服务器,用于请求阿里云OSS 分发出Token,然后客户端通过token进行访问和上传下载。
去阿里云上下载一个sts-server作为服务器端,专门用来分发token,这个直接去阿里云下载代码,部署到服务器上运行就行。
返回的一个json数据,里面包含了SecurityToken.

4.开始编写客户端的代码
首先加入依赖包
implementation 'com.aliyun.dpa:oss-android-sdk:+'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.squareup.okio:okio:1.9.0'
加入权限设置:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
加入混淆设置;注意,这里是重点,一定要加入,不然会出各种奇怪的问题。

加入到文件proguard-rules.pro中
-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
初始化对象OSSCLIENT
String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
String stsServer = "../sts-server/sts-server/sts.php";
String callbackAddress = "http://oss-demo.aliyuncs.com:23450";
//推荐使用OSSAuthCredentialsProvider。token过期可以及时更新
OSSCredentialProvider credentialProvider = new OSSAuthCredentialsProvider(stsServer);
//该配置类如果不设置,会有默认配置,具体可看该类
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider,conf);
上传图片代码:
{
// 构造上传请求
PutObjectRequest put = new PutObjectRequest("hzltest1", "333333333333333333333333", FilePath);
//PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
// 异步上传时可以设置进度回调
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@Override
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 请求异常
if (clientExcepion != null) {
// 本地异常如网络异常等
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// 服务异常
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
}); }
到底,文件能够上传成功就是OK的。
这里上传的代码还是比较简单的,主要难在配置,和阿里云本身的文档写的很分散,东一块西一块,你需要首先了解很多技术才能很快的上手,否则,对于一个刚购买OSS的人来说,用起来着实是麻烦。
android 阿里云oss上传的更多相关文章
- 关于 tp5.0 阿里云 oss 上传文件操作
tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题 应该是移动后的路劲(相对于服 ...
- TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片
**TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...
- 使用阿里云OSS上传文件
本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...
- c#版阿里云oss上传——基于layui、pupload的oss 后端web端直传的vue组件
废话前言 去年,做项目用到oss上传,度娘上逛了一圈写了个前后端代码结合的c#版oss上传. 今年又要用到oss上传时发现很难复用,复用改动的范围太大,显然这个轮子不合格.于是想了下,花了一天的时间( ...
- 阿里云OSS上传文件本地调试跨域问题解决
问题描述: 最近后台说为了提高上传效率,要前端直接上传文件到阿里云,而不经过后台.因为在阿里云服务器设置的允许源(region)为某个固定的域名下的源(例如*.cheche.com),直接在本地访问会 ...
- 阿里云oss上传文件如何支持https?
let client = new OSS.Wrapper({ accessKeyId: res.data.accessKeyId, accessKeySecret: res.data.accessKe ...
- 阿里云OSS 上传文件SDK
Aliyun OSS SDK for C# 上传文件 另外:查找的其他实现C#上传文件功能例子: 1.WPF用流的方式上传/显示/下载图片文件(保存在数据库) (文末有案例下载链接) 2.WPF中利用 ...
- 阿里云OSS上传文件demo
1.安装ali-oss npm install ali-oss --save 2.demo 此例中使用到了ElementUI的el-upload组件.因为样式为自定义的 所以没有用element的自动 ...
- 阿里云 oss 上传文件,js直传,.net 签名,回调
后台签名 添加引用 string dir = string.Format("{0:yyyy-MM-dd}", date) + "/"; OssClient cl ...
随机推荐
- Win10企业版转专业版
原文地址:https://jingyan.baidu.com/article/86112f136624322737978797.html 转换ISO镜像下载地址: ed2k://|file|cn_wi ...
- 【C语言】练习1-23
题目来源:<The C programming language>中的习题 练习1-23: 写一个删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不 ...
- mysql升级5.5
对付Linux的问题,其实很多都是权限问题,细心想一下即可. centos6.4默认装的是mysql5.1,使用 yum update 也update不了.google了一下,找到个yum安装的方法: ...
- Mac OS X 下使用清理软件,这是我他妈干过最傻的事情,之一
Mac OS X 系统设计良好,数据都是有序地存储在不同的文件夹下,配置和安装软件几乎都是极其简单的事情,不过几个月前刚入手mac,我还是好奇地使用了一个mac 下的清理软件,也不记得叫什么名字了,自 ...
- Bootstrap表单构造器
http://www.bootcss.com/p/bootstrap-form-builder/
- Python 文件 write() 方法
概述 Python 文件 write() 方法用于向文件中写入指定字符串. 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的. 语法 write() 方法语法如 ...
- Android_ViewPager_实现多个图片水平滚动
1.示意图 2.实现分析 (1).xml配置 <!-- 配置container和pager的clipChildren=false, 并且指定margi ...
- [转]同步对象Event的用法
同步对象Event的用法 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent函数功能描述:创建或打开一个命名的或无名的事 ...
- 正则和xpath在网页中匹配字段的效率比较
1. 测试页面是 https://www.hao123.com/,这个是百度的导航 2. 为了避免网络请求带来的差异,我们把网页下载下来,命名为html,不粘贴其代码. 3.测试办法: 我们在页面中 ...
- 设置 debug 版本签名与生产版本一致
debug 版本使用生产版本的签名 在开发过程中,app 直接跑到手机上,用的签名文件是 Android Studio 默认的自动生成的一个签名,与生产版本的 app 签名是不一样的.当接入华为推送的 ...