概要
阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。用户可以通过调用API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过用户Web控制台对数据进行简单的管理。OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。
当然,如果您找到了这篇文章相信您已经知道是什么了,那么废话少说,这里提出一些关于Android开发的小经验,帮助您快速入门
问题目录
从这里开始
首先我们要进行开发,一定是要开发者文档的 ~ 若您还没有注册OSS服务则请在您的阿里云账号上找到如下位置注册即可
注册了之后您要了解如下信息,以便我们代码的编写
1、点击进入bucket时您的bucket名称
2、进入Bucket概览里找到您的外网域名
3、进入Object管理里面查看并修改您的文件目录
4、在这里获得AccessKeys(因为假如您给bucket设置了读写权限的话AccessKey就相当于一个通行证,可以在您的程序里自由读写访问bucket)
代码编写
如果以上任务都完成了的话~就让我们开始吧
因为OSS我们并不熟悉,而我们往往会很急着用,所以……
拿来用!!
这里贴出资源路径:
http://download.csdn.net/detail/baidu_25537855/9517304
免费的,随便下=w=
代码下载下来相信您已经明白了一大半
这里详细解释一下各个参数:
// 运行sample前需要配置以下字段为有效的值
private static final String endpoint = "oss-cn-city.aliyuncs.com"; //这个是外网域名的后半部分(外网域名 = bucket.endpoint)
private static final String accessKeyId = "这个不能让你们看你们也能找到";
private static final String accessKeySecret = "这个也是";
private static final String uploadFilePath = Environment.getExternalStorageDirectory().getPath()+"/test/testByLyfsForOSS.txt"; //这个路径是你要上传的文件的路径(本地)
private static final String testBucket = "这个就是bucket";
private static final String uploadObject = "images/TestByLyfsForOSS2.txt"; //这个是你要上传到OSS的文件路径,加入想上传到文件夹则前面加上****/****形式的路径即可
private static final String downloadObject = "images/TestByLyfsForOSS.txt"; // 同理,从OSS上下载的路径
当把这个各参数配置好配置对了之后相信就可以运行试试咯,你会发现文件已经成功传输和下载
用OSS下载图片
将文件目录下的
作为外部模块导入你的相关工程,再把测试文件里除了MainActivity的其他文件导入进来粘贴到你的工程里如图
然后就可以在你想要调用的Activity里调用相关的方法了!!
但是怎么进行图片的上传下载呢?这里仅以下载为例进行分析,如有上传有困难的请评论或者私信
这里我们稍微修改了一下OSS提供的内部代码来达成我们的目的
public byte[] asyncGetObjectSample() {
GetObjectRequest get = new GetObjectRequest(testBucket, testObject);
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// 请求成功
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
int len;
try {
while ((len = inputStream.read(buffer)) != -1) {
// 处理下载的数据
outStream.write(buffer, 0, len);
Log.d("asyncGetObjectSample", "read length: " + len);
}
outStream.flush();
imageByteArray = outStream.toByteArray();
outStream.close();
Log.d("asyncGetObjectSample", "download success.");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(GetObjectRequest 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());
}
}
});
while (imageByteArray == null)
{
}
return imageByteArray;
}
原API给的方法是在这个方法里进行一个异步任务来完成下载,我们只要把获得的字节流拼装之后转换成相应的文件即可,但是我们要在程序里用,所以这里用了一个蹩脚的方法:循环判定直到我们想要的字节流不再为空则返回
这里比较重要的代码单独贴出来
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
int len;
try {
while ((len = inputStream.read(buffer)) != -1) {
// 处理下载的数据
outStream.write(buffer, 0, len);
Log.d("asyncGetObjectSample", "read length: " + len);
}
outStream.flush();
imageByteArray = outStream.toByteArray();
outStream.close();
这样就可以在
imageByteArray
里获得最终下载完成的字节数组并进行相关的处理了
new Thread(new Runnable() {
@Override
public void run() {
imgv_header_pic = BitmapUtils.getPicFromBytes(new GetObjectSamples(NetWorkUtils.oss, Data.testBucket, Data.downloadObject).asyncGetObjectSample(),null);
handler.sendEmptyMessage(HANDLER_BANNER_PIC);
}
}).start();
我们通过
BitmapUtils.getPicFromByte()
方法将字节数组转换成图片,这个方法的代码为
public static Bitmap getPicFromBytes(byte[] bytes,BitmapFactory.Options opts)
{
Log.e("lyfsInBitmap","begin");
if (bytes != null) {
if (opts != null) {
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
} else {
Log.e("lyfsInBitmap", bytes.toString());
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
}else {
Log.e("lyfsInBitmap","bad");
}
return null;
}
如果没有刚才我们运用的那个蹩脚的while循环的话这里传来的字节数组将为空
这样我们就将图片成功的加载下来了,可喜可贺!!
最后调用你的handler进行界面处理就好了
有相关OSS的问题欢迎讨论~程序猿要对自己好一点,愿你在程序的世界里呼风唤雨,成为一个大侠=w=好吧,我承认程序员的修真小说看多了,大家早点休息,晚安~