Android 上传图片到阿里云 OSS

本篇博客主要介绍的是将本地图片上传到服务器的方法技巧

首先附上阿里云oss官网SDK介绍:点击打开链接

附上官方推荐的demo 点击打开链接

在app的build中配置oss :compile 'com.aliyun.dpa:oss-android-sdk:+'

技术相对简单,主要是将这些技术结合起来的例子并不多

首先先初始化oss对象

  1. // ACCESS_ID,ACCESS_KEY是在阿里云申请的
  2. OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(ACCESS_ID, ACCESS_KEY);
  3. ClientConfiguration conf = new ClientConfiguration();
  4. conf.setConnectionTimeout( 15 * 1000); // 连接超时,默认15秒
  5. conf.setSocketTimeout( 15 * 1000); // socket超时,默认15秒
  6. conf.setMaxConcurrentRequest( 8); // 最大并发请求数,默认5个
  7. conf.setMaxErrorRetry( 2); // 失败后最大重试次数,默认2次
  8. // oss为全局变量,OSS_ENDPOINT是一个OSS区域地址
  9. oss = new OSSClient(getApplicationContext(), OSS_ENDPOINT, credentialProvider, conf);

oss上传图片分为同步和异步 

同步的方法

  1. // 构造上传请求
  2. PutObjectRequest put = new PutObjectRequest( "", "", "");
  3. // 文件元信息的设置是可选的
  4. // ObjectMetadata metadata = new ObjectMetadata();
  5. // metadata.setContentType("application/octet-stream"); // 设置content-type
  6. // metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // 校验MD5
  7. // put.setMetadata(metadata);
  8. try {
  9. PutObjectResult putResult = oss.putObject(put);
  10. Log.d( "PutObject", "UploadSuccess");
  11. Log.d( "ETag", putResult.getETag());
  12. Log.d( "RequestId", putResult.getRequestId());
  13. } catch (ClientException e) {
  14. // 本地异常如网络异常等
  15. e.printStackTrace();
  16. } catch (ServiceException e) {
  17. // 服务异常
  18. Log.e( "RequestId", e.getRequestId());
  19. Log.e( "ErrorCode", e.getErrorCode());
  20. Log.e( "HostId", e.getHostId());
  21. Log.e( "RawMessage", e.getRawMessage());
  22. }

此处这个bucketName是在阿里云平台上配置的 用来储存文件 可以设置私有公有等属性 

objectKey为文件的名字 用来从平台上查询图片

FilePath为所选文件的uri路径


异步上传的方法

  1. // 构造上传请求
  2. PutObjectRequest put = new PutObjectRequest( "", "", "");
  3. // 异步上传时可以设置进度回调
  4. put.setProgressCallback( new OSSProgressCallback() {
  5. @Override
  6. public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
  7. Log.d( "PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
  8. }
  9. });
  10. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() {
  11. @Override
  12. public void onSuccess(PutObjectRequest request, PutObjectResult result) {
  13. Log.d( "PutObject", "UploadSuccess");
  14. Log.d( "ETag", result.getETag());
  15. Log.d( "RequestId", result.getRequestId());
  16. }
  17. @Override
  18. public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  19. // 请求异常
  20. if (clientExcepion != null) {
  21. // 本地异常如网络异常等
  22. clientExcepion.printStackTrace();
  23. }
  24. if (serviceException != null) {
  25. // 服务异常
  26. Log.e( "ErrorCode", serviceException.getErrorCode());
  27. Log.e( "RequestId", serviceException.getRequestId());
  28. Log.e( "HostId", serviceException.getHostId());
  29. Log.e( "RawMessage", serviceException.getRawMessage());
  30. }
  31. }
  32. });
  33. // task.cancel(); // 可以取消任务
  34. // task.waitUntilFinished(); // 可以等待任务完成

一般上传成功时候 客户端需要把文件的objectkey传给后台 后台通过拼接然后把图片的url返回给我们

你可能感兴趣的:(Android开发)