aliyun-oss-react-native

AliyunDownloadManager.java 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.reactlibrary;
  2. import android.os.Environment;
  3. import android.util.Log;
  4. import com.alibaba.sdk.android.oss.ClientException;
  5. import com.alibaba.sdk.android.oss.OSS;
  6. import com.alibaba.sdk.android.oss.ServiceException;
  7. import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
  8. import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
  9. import com.alibaba.sdk.android.oss.model.GetObjectRequest;
  10. import com.alibaba.sdk.android.oss.model.GetObjectResult;
  11. import com.facebook.react.bridge.Arguments;
  12. import com.facebook.react.bridge.Promise;
  13. import com.facebook.react.bridge.ReactContext;
  14. import com.facebook.react.bridge.ReactMethod;
  15. import com.facebook.react.bridge.ReadableMap;
  16. import com.facebook.react.bridge.WritableMap;
  17. import com.facebook.react.modules.core.DeviceEventManagerModule;
  18. import java.io.File;
  19. import java.io.FileNotFoundException;
  20. import java.io.FileOutputStream;
  21. import java.io.IOException;
  22. import java.io.InputStream;
  23. public class AliyunDownloadManager {
  24. private OSS mOSS;
  25. /**
  26. * AliyunDownloadManager
  27. * @param oss
  28. */
  29. public AliyunDownloadManager(OSS oss) {
  30. mOSS = oss;
  31. }
  32. public void asyncDownload(final ReactContext context,String bucketName, String ossFile, String updateDate, ReadableMap options, final Promise promise) {
  33. GetObjectRequest get = new GetObjectRequest(bucketName, ossFile);
  34. String xOssPositon = options.getString("x-oss-process");
  35. //process image
  36. get.setxOssProcess(xOssPositon);
  37. OSSAsyncTask task = mOSS.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  38. @Override
  39. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  40. Log.d("Content-Length", "" + result.getContentLength());
  41. InputStream inputStream = result.getObjectContent();
  42. long resultLength = result.getContentLength();
  43. byte[] buffer = new byte[2048];
  44. int len;
  45. FileOutputStream outputStream = null;
  46. String localImgURL = Environment.getExternalStorageDirectory().getAbsolutePath() +
  47. "/ImgCache/" +
  48. System.currentTimeMillis() +
  49. ".jpg";
  50. Log.d("localImgURL", localImgURL);
  51. File cacheFile = new File(localImgURL);
  52. if (!cacheFile.exists()) {
  53. cacheFile.getParentFile().mkdirs();
  54. try {
  55. cacheFile.createNewFile();
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. promise.reject("DownloadFaile", e);
  59. }
  60. }
  61. long readSize = cacheFile.length();
  62. try {
  63. outputStream = new FileOutputStream(cacheFile, true);
  64. } catch (FileNotFoundException e) {
  65. e.printStackTrace();
  66. promise.reject("DownloadFaile", e);
  67. }
  68. if (resultLength == -1) {
  69. promise.reject("DownloadFaile", "message:lengtherror");
  70. }
  71. try {
  72. while ((len = inputStream.read(buffer)) != -1) {
  73. // resove download data
  74. try {
  75. outputStream.write(buffer, 0, len);
  76. readSize += len;
  77. String str_currentSize = Long.toString(readSize);
  78. String str_totalSize = Long.toString(resultLength);
  79. WritableMap onProgressValueData = Arguments.createMap();
  80. onProgressValueData.putString("currentSize", str_currentSize);
  81. onProgressValueData.putString("totalSize", str_totalSize);
  82. context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
  83. .emit("downloadProgress", onProgressValueData);
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. promise.reject("DownloadFaile", e);
  87. }
  88. }
  89. outputStream.flush();
  90. } catch (IOException e) {
  91. e.printStackTrace();
  92. promise.reject("DownloadFaile", e);
  93. } finally {
  94. if (outputStream != null) {
  95. try {
  96. outputStream.close();
  97. } catch (IOException e) {
  98. promise.reject("DownloadFaile", e);
  99. }
  100. }
  101. if (inputStream != null) {
  102. try {
  103. inputStream.close();
  104. } catch (IOException e) {
  105. promise.reject("DownloadFaile", e);
  106. }
  107. }
  108. promise.resolve(localImgURL);
  109. }
  110. }
  111. @Override
  112. public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  113. PromiseExceptionManager.resolvePromiseException(clientExcepion,serviceException,promise);
  114. }
  115. });
  116. }
  117. }