Nav apraksta

RNFetchBlob.java 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.RNFetchBlob;
  2. import com.facebook.react.bridge.Callback;
  3. import com.facebook.react.bridge.Promise;
  4. import com.facebook.react.bridge.ReactApplicationContext;
  5. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  6. import com.facebook.react.bridge.ReactMethod;
  7. import com.facebook.react.bridge.ReadableArray;
  8. import com.facebook.react.bridge.ReadableMap;
  9. import java.util.Map;
  10. import java.util.concurrent.LinkedBlockingQueue;
  11. import java.util.concurrent.ThreadPoolExecutor;
  12. import java.util.concurrent.TimeUnit;
  13. public class RNFetchBlob extends ReactContextBaseJavaModule {
  14. static ReactApplicationContext RCTContext;
  15. static LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>();
  16. static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 5000, TimeUnit.MILLISECONDS, taskQueue);
  17. public RNFetchBlob(ReactApplicationContext reactContext) {
  18. super(reactContext);
  19. RCTContext = reactContext;
  20. }
  21. @Override
  22. public String getName() {
  23. return "RNFetchBlob";
  24. }
  25. @Override
  26. public Map<String, Object> getConstants() {
  27. return RNFetchBlobFS.getSystemfolders(this.getReactApplicationContext());
  28. }
  29. @ReactMethod
  30. public void createFile(final String path, final String content, final String encode, final Callback callback) {
  31. threadPool.execute(new Runnable() {
  32. @Override
  33. public void run() {
  34. RNFetchBlobFS.createFile(path, content, encode, callback);
  35. }
  36. });
  37. }
  38. @ReactMethod
  39. public void createFileASCII(final String path, final ReadableArray dataArray, final Callback callback) {
  40. threadPool.execute(new Runnable() {
  41. @Override
  42. public void run() {
  43. RNFetchBlobFS.createFileASCII(path, dataArray, callback);
  44. }
  45. });
  46. }
  47. @ReactMethod
  48. public void writeArrayChunk(final String streamId, final ReadableArray dataArray, final Callback callback) {
  49. RNFetchBlobFS.writeArrayChunk(streamId, dataArray, callback);
  50. }
  51. @ReactMethod
  52. public void unlink(String path, Callback callback) {
  53. RNFetchBlobFS.unlink(path, callback);
  54. }
  55. @ReactMethod
  56. public void mkdir(String path, Callback callback) {
  57. RNFetchBlobFS.mkdir(path, callback);
  58. }
  59. @ReactMethod
  60. public void exists(String path, Callback callback) {
  61. RNFetchBlobFS.exists(path, callback);
  62. }
  63. @ReactMethod
  64. public void cp(final String path, final String dest, final Callback callback) {
  65. threadPool.execute(new Runnable() {
  66. @Override
  67. public void run() {
  68. RNFetchBlobFS.cp(path, dest, callback);
  69. }
  70. });
  71. }
  72. @ReactMethod
  73. public void mv(String path, String dest, Callback callback) {
  74. RNFetchBlobFS.mv(path, dest, callback);
  75. }
  76. @ReactMethod
  77. public void ls(String path, Callback callback) {
  78. RNFetchBlobFS.ls(path, callback);
  79. }
  80. @ReactMethod
  81. public void writeStream(String path, String encode, boolean append, Callback callback) {
  82. new RNFetchBlobFS(this.getReactApplicationContext()).writeStream(path, encode, append, callback);
  83. }
  84. @ReactMethod
  85. public void writeChunk(String streamId, String data, Callback callback) {
  86. RNFetchBlobFS.writeChunk(streamId, data, callback);
  87. }
  88. @ReactMethod
  89. public void closeStream(String streamId, Callback callback) {
  90. RNFetchBlobFS.closeStream(streamId, callback);
  91. }
  92. @ReactMethod
  93. public void removeSession(ReadableArray paths, Callback callback) {
  94. RNFetchBlobFS.removeSession(paths, callback);
  95. }
  96. @ReactMethod
  97. public void readFile(final String path, final String encoding, final Promise promise) {
  98. threadPool.execute(new Runnable() {
  99. @Override
  100. public void run() {
  101. RNFetchBlobFS.readFile(path, encoding, promise);
  102. }
  103. });
  104. }
  105. @ReactMethod
  106. public void writeFileArray(final String path, final ReadableArray data, final boolean append, final Promise promise) {
  107. threadPool.execute(new Runnable() {
  108. @Override
  109. public void run() {
  110. RNFetchBlobFS.writeFile(path, data, append, promise);
  111. }
  112. });
  113. }
  114. @ReactMethod
  115. public void writeFile(final String path, final String encoding, final String data, final boolean append, final Promise promise) {
  116. threadPool.execute(new Runnable() {
  117. @Override
  118. public void run() {
  119. RNFetchBlobFS.writeFile(path, encoding, data, append, promise);
  120. }
  121. });
  122. }
  123. @ReactMethod
  124. public void lstat(String path, Callback callback) {
  125. RNFetchBlobFS.lstat(path, callback);
  126. }
  127. @ReactMethod
  128. public void stat(String path, Callback callback) {
  129. RNFetchBlobFS.stat(path, callback);
  130. }
  131. @ReactMethod
  132. public void scanFile(final ReadableArray pairs, final Callback callback) {
  133. final ReactApplicationContext ctx = this.getReactApplicationContext();
  134. threadPool.execute(new Runnable() {
  135. @Override
  136. public void run() {
  137. int size = pairs.size();
  138. String [] p = new String[size];
  139. String [] m = new String[size];
  140. for(int i=0;i<size;i++) {
  141. ReadableMap pair = pairs.getMap(i);
  142. if(pair.hasKey("path")) {
  143. p[i] = pair.getString("path");
  144. if(pair.hasKey("mime"))
  145. m[i] = pair.getString("mime");
  146. else
  147. m[i] = null;
  148. }
  149. }
  150. new RNFetchBlobFS(ctx).scanFile(p, m, callback);
  151. }
  152. });
  153. }
  154. @ReactMethod
  155. /**
  156. * @param path Stream file path
  157. * @param encoding Stream encoding, should be one of `base64`, `ascii`, and `utf8`
  158. * @param bufferSize Stream buffer size, default to 1024 or 1026(base64).
  159. */
  160. public void readStream(String path, String encoding, int bufferSize) {
  161. RNFetchBlobFS fs = new RNFetchBlobFS(this.getReactApplicationContext());
  162. fs.readStream(path, encoding, bufferSize);
  163. }
  164. @ReactMethod
  165. public void cancelRequest(String taskId, Callback callback) {
  166. try {
  167. RNFetchBlobReq.cancelTask(taskId);
  168. callback.invoke(null, taskId);
  169. } catch (Exception ex) {
  170. callback.invoke(ex.getLocalizedMessage(), null);
  171. }
  172. }
  173. @ReactMethod
  174. public void slice(String src, String dest, int start, int end, String encode, Callback callback) {
  175. RNFetchBlobFS.slice(src, dest, start, end, encode, callback);
  176. }
  177. @ReactMethod
  178. public void enableProgressReport(String taskId) {
  179. RNFetchBlobReq.progressReport.put(taskId, true);
  180. }
  181. @ReactMethod
  182. public void enableUploadProgressReport(String taskId) {
  183. RNFetchBlobReq.uploadProgressReport.put(taskId, true);
  184. }
  185. @ReactMethod
  186. public void fetchBlob(ReadableMap options, String taskId, String method, String url, ReadableMap headers, String body, final Callback callback) {
  187. new RNFetchBlobReq(options, taskId, method, url, headers, body, null, callback).run();
  188. }
  189. @ReactMethod
  190. public void fetchBlobForm(ReadableMap options, String taskId, String method, String url, ReadableMap headers, ReadableArray body, final Callback callback) {
  191. new RNFetchBlobReq(options, taskId, method, url, headers, null, body, callback).run();
  192. }
  193. }