19
19
import com .loopj .android .http .MySSLSocketFactory ;
20
20
21
21
import java .io .File ;
22
+ import java .io .IOException ;
23
+ import java .io .InputStream ;
22
24
import java .security .KeyStore ;
23
25
24
26
import cz .msebera .android .httpclient .HttpEntity ;
@@ -111,6 +113,8 @@ public void run() {
111
113
112
114
req = new AsyncHttpClient ();
113
115
116
+ req .setLoggingEnabled (false );
117
+
114
118
// use trusty SSL socket
115
119
if (this .options .trusty ) {
116
120
KeyStore trustStore = KeyStore .getInstance (KeyStore .getDefaultType ());
@@ -196,16 +200,34 @@ void buildFormEntity(ReadableArray body) {
196
200
String data = map .getString ("data" );
197
201
// file field
198
202
if (map .hasKey ("filename" )) {
203
+ String mime = map .hasKey ("type" ) ? map .getString ("type" ) : ContentType .APPLICATION_OCTET_STREAM .getMimeType ();
199
204
String filename = map .getString ("filename" );
200
205
// upload from storage
201
206
if (data .startsWith (filePathPrefix )) {
202
207
String orgPath = data .substring (filePathPrefix .length ());
203
- File file = new File (RNFetchBlobFS .normalizePath (orgPath ));
204
- form .addBinaryBody (name , file , ContentType .APPLICATION_OCTET_STREAM , filename );
208
+ orgPath = RNFetchBlobFS .normalizePath (orgPath );
209
+ // path starts with content://
210
+ if (RNFetchBlobFS .isAsset (orgPath )) {
211
+ try {
212
+ String assetName = orgPath .replace (RNFetchBlobFS .assetPrefix , "" );
213
+ InputStream in = RNFetchBlob .RCTContext .getAssets ().open (assetName );
214
+ long length = RNFetchBlob .RCTContext .getAssets ().openFd (assetName ).getLength ();
215
+ byte [] bytes = new byte [(int ) length ];
216
+ in .read (bytes , 0 , (int ) length );
217
+ in .close ();
218
+ form .addBinaryBody (name , bytes , ContentType .create (mime ), filename );
219
+ } catch (IOException e ) {
220
+ // e.printStackTrace();
221
+ }
222
+ }
223
+ else {
224
+ File file = new File (RNFetchBlobFS .normalizePath (orgPath ));
225
+ form .addBinaryBody (name , file , ContentType .create (mime ), filename );
226
+ }
205
227
}
206
228
// base64 embedded file content
207
229
else {
208
- form .addBinaryBody (name , Base64 .decode (data , 0 ), ContentType .APPLICATION_OCTET_STREAM , filename );
230
+ form .addBinaryBody (name , Base64 .decode (data , 0 ), ContentType .create ( mime ) , filename );
209
231
}
210
232
}
211
233
// data field
@@ -228,8 +250,25 @@ void buildEntity(String body) {
228
250
byte [] blob ;
229
251
// upload from storage
230
252
if (body .startsWith (filePathPrefix )) {
231
- String filePath = body .substring (filePathPrefix .length ());
232
- entity = new FileEntity (new File (RNFetchBlobFS .normalizePath (filePath )));
253
+ String orgPath = body .substring (filePathPrefix .length ());
254
+ orgPath = RNFetchBlobFS .normalizePath (orgPath );
255
+ // handle
256
+ if (RNFetchBlobFS .isAsset (orgPath )) {
257
+ try {
258
+ String assetName = orgPath .replace (RNFetchBlobFS .assetPrefix , "" );
259
+ InputStream in = RNFetchBlob .RCTContext .getAssets ().open (assetName );
260
+ long length = 0 ;
261
+ length = RNFetchBlob .RCTContext .getAssets ().openFd (assetName ).getLength ();
262
+ byte [] bytes = new byte [(int ) length ];
263
+ in .read (bytes , 0 , (int ) length );
264
+ in .close ();
265
+ entity = new ByteArrayEntity (bytes );
266
+ } catch (IOException e ) {
267
+ // e.printStackTrace();
268
+ }
269
+ }
270
+ else
271
+ entity = new FileEntity (new File (RNFetchBlobFS .normalizePath (orgPath )));
233
272
}
234
273
else {
235
274
blob = Base64 .decode (body , 0 );
0 commit comments