以下演示了上传、下载文件的基本流程。更多细节用法可以参考本工程的:
test目录:
点击查看
或者:
sample目录:
点击查看。
STEP-1. 初始化OSSClient
初始化主要完成Endpoint设置、鉴权方式设置、Client参数设置。其中,鉴权方式包含自签名模式、STS鉴权模式。如果要使用STS鉴权请先阅读访问控制章节了解RAM的基础知识。以下内容假设您已开通RAM服务并了解RAM相关内容。了解如何获取子账户AccessKeyId,SecretKeyId以及RoleArn信息。
完善
脚本文件中AccessKeyId,SecretKeyId以及RoleArn参数信息。通过python可以启动一个本机http服务。在客户端代码中访问本地服务从而获得StsToken.AccessKeyId,StsToken.SecretKeyId以及StsToken.SecurityToken。
更多信息可查看sample 中sts 使用方式
点击查看。
- String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
- // 在移动端建议使用STS方式初始化OSSClient。
- // 更多信息可查看sample 中 sts 使用方式(https://github.com/aliyun/aliyun-oss-android-sdk/tree/master/app/src/main/java/com/alibaba/sdk/android/oss/app)
- OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");
- //该配置类如果不设置,会有默认配置,具体可看该类
- ClientConfiguration conf = new ClientConfiguration();
- conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
- conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
- conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
- conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
- //开启可以在控制台看到日志,并且会支持写入手机sd卡中的一份日志文件位置在SDCard_path\OSSLog\logs.csv 默认不开启
- //日志会记录oss操作行为中的请求数据,返回数据,异常信息
- //例如requestId,response header等
- //android_version:5.1 android版本
- //mobile_model:XT1085 android手机型号
- //network_state:connected 网络状况
- //network_type:WIFI 网络连接类型
- //具体的操作行为信息:
- //[2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
- //A bucket name must:
- //1) be comprised of lower-case characters, numbers or dash(-);
- //2) start with lower case or numbers;
- //3) be between 3-63 characters long.
- //------>end of log
- OSSLog.enableLog();
- OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
通过OSSClient发起上传、下载请求是线程安全的,您可以并发执行多个任务。
STEP-2. 上传文件
这里假设您已经在控制台上拥有自己的Bucket,这里演示如何从把一个本地文件上传到OSS:
- // 构造上传请求
- 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");
- }
- @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());
- }
- }
- });
- // task.cancel(); // 可以取消任务
- // task.waitUntilFinished(); // 可以等待直到任务完成
STEP-3. 下载指定文件
下载一个指定object,返回数据的输入流,需要自行处理:
- // 构造下载文件请求
- GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
- OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
- @Override
- public void onSuccess(GetObjectRequest request, GetObjectResult result) {
- // 请求成功
- Log.d("Content-Length", "" + getResult.getContentLength());
- InputStream inputStream = result.getObjectContent();
- byte[] buffer = new byte[2048];
- int len;
- try {
- while ((len = inputStream.read(buffer)) != -1) {
- // 处理下载的数据
- }
- } 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());
- }
- }
- });
- // task.cancel(); // 可以取消任务
- // task.waitUntilFinished(); // 如果需要等待任务完成