本文共 4771 字,大约阅读时间需要 15 分钟。
近期,公司要求使用OSS下载文件,优化下载模块
首先,想要使用OSS,必须下载其相关依赖implementation 'com.aliyun.dpa:oss-android-sdk:2.9.5' // implementation project(':oss-android-sdk')
依赖下载成功后,需要配置Config文件(提高安全性,使用STS方式)
public class Config { // 访问的endpoint地址 public static final String OSS_ENDPOINT = "后台获取的end_point地址"; //callback 测试地址 public static final String OSS_CALLBACK_URL = "上传的callback"; public static final String STS_SERVER_URL = "后台获取STS地址";//STS 地址 public static final String BUCKET_NAME = "后台提供的Bucket_name"; public static final String OSS_ACCESS_KEY_ID = "后台提供的AccessKeyID"; public static final String OSS_ACCESS_KEY_SECRET = "后台提供的AccessKeySecret"; public static final int DOWNLOAD_SUC = 1; public static final int DOWNLOAD_Fail = 2; public static final int UPLOAD_SUC = 3; public static final int UPLOAD_Fail = 4; public static final int UPLOAD_PROGRESS = 5; public static final int LIST_SUC = 6; public static final int HEAD_SUC = 7; public static final int RESUMABLE_SUC = 8; public static final int SIGN_SUC = 9; public static final int BUCKET_SUC = 10; public static final int GET_STS_SUC = 11; public static final int MULTIPART_SUC = 12; public static final int STS_TOKEN_SUC = 13; public static final int FAIL = 9999; public static final int REQUESTCODE_AUTH = 10111; public static final int REQUESTCODE_LOCALPHOTOS = 10112; public static final int REQUESTCODE_OPEN_DOCUMENT = 10113;}
在我们配置好Config文件后,就可以初始化OSS了:
OSSCredentialProvider credentialProvider; //使用自己的获取STSToken的类 credentialProvider = new OSSAuthCredentialsProvider(Config.STS_SERVER_URL); editBucketName = Config.BUCKET_NAME; ClientConfiguration conf = new ClientConfiguration(); conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒 conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒 conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个 conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次 OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf); OSSLog.enableLog(); //开启Log打印 return new OssService(oss, editBucketName, displayer);
初始化完成后,就可以进行下载啦:
GetObjectRequest get = new GetObjectRequest(Config.BUCKET_NAME, 下载的文件路径); //此处为设置进度条,如不需要可以删除 get.setProgressListener(new OSSProgressCallback() { @Override public void onProgress(GetObjectRequest request, long currentSize, long totalSize) { Log.d("GetObject", "currentSize: " + currentSize + " totalSize: " + totalSize); int progress = (int) (100 * currentSize / totalSize); mDisplayer.updateProgress(progress); mDisplayer.displayInfo("下载进度: " + String.valueOf(progress) + "%"); } }); OSSLog.logDebug("asyncGetObject"); // 此处下载任务 OSSAsyncTask task = mOss.asyncGetObject(get, new OSSCompletedCallback () { @Override public void onSuccess(GetObjectRequest request, GetObjectResult result) { // 请求成功 InputStream inputStream = result.getObjectContent(); //Bitmap bm = BitmapFactory.decodeStream(inputStream); try { //需要根据对应的View大小来自适应缩放 Bitmap bm = mDisplayer.autoResizeFromStream(inputStream); long get_end = System.currentTimeMillis(); OSSLog.logDebug("get cost: " + (get_end - get_start) / 1000f); mDisplayer.downloadComplete(bm); mDisplayer.displayInfo("Bucket: " + mBucket + "\nObject: " + request.getObjectKey() + "\nRequestId: " + result.getRequestId()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { String info = ""; // 请求异常 if (clientExcepion != null) { // 本地异常如网络异常等 clientExcepion.printStackTrace(); info = clientExcepion.toString(); } if (serviceException != null) { // 服务异常 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); info = serviceException.toString(); } mDisplayer.downloadFail(info); mDisplayer.displayInfo(info); } });
转载地址:http://fayj.baihongyu.com/