From 00a26ce57af1cc70597571501794e6fd83a3a276 Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Wed, 13 Jan 2016 13:06:56 +0200 Subject: [PATCH 1/5] Use form name in Content-Disposition --- .../src/main/java/com/yoloci/fileupload/FileUploadModule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java index 1c01743..1e3f409 100644 --- a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java +++ b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java @@ -107,13 +107,14 @@ public void upload(final ReadableMap options, final Callback callback) { for (int i = 0; i < files.size(); i++) { ReadableMap file = files.getMap(i); + String name = file.getString("name"); String filename = file.getString("filename"); String filepath = file.getString("filepath"); filepath = filepath.replace("file://", ""); fileInputStream = new FileInputStream(filepath); outputStream.writeBytes(twoHyphens + boundary + lineEnd); - outputStream.writeBytes("Content-Disposition: form-data; name=\"image\";filename=\"" + filename + "\"" + lineEnd); + outputStream.writeBytes("Content-Disposition: form-data; name=\"" + name + "\";filename=\"" + filename + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); From 575dea554c286fa89447dc2338fae4f609fc1d4e Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Wed, 13 Jan 2016 15:08:15 +0200 Subject: [PATCH 2/5] Set file Content-Type --- .../src/main/java/com/yoloci/fileupload/FileUploadModule.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java index 1e3f409..f072fe0 100644 --- a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java +++ b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java @@ -110,11 +110,13 @@ public void upload(final ReadableMap options, final Callback callback) { String name = file.getString("name"); String filename = file.getString("filename"); String filepath = file.getString("filepath"); + String filetype = file.getString("filetype"); filepath = filepath.replace("file://", ""); fileInputStream = new FileInputStream(filepath); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"" + name + "\";filename=\"" + filename + "\"" + lineEnd); + outputStream.writeBytes("Content-Type: " + filetype + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); From 3394e0beb7e8f8e915a101d5f03e6a2270b95e21 Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Sun, 17 Jan 2016 12:53:46 +0200 Subject: [PATCH 3/5] fix error codes --- FileUpload.m | 10 +++++++--- .../java/com/yoloci/fileupload/FileUploadModule.java | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/FileUpload.m b/FileUpload.m index 5899616..597e2da 100755 --- a/FileUpload.m +++ b/FileUpload.m @@ -128,9 +128,13 @@ @implementation FileUpload NSInteger statusCode = [response statusCode]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; - NSDictionary *res=[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInteger:statusCode],@"status",returnString,@"data",nil]; - - callback(@[[NSNull null], res]); + if ((statusCode >= 200) && (statusCode < 300)) { + NSDictionary *res=[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInteger:statusCode],@"status",returnString,@"data",nil]; + callback(@[[NSNull null], res]); + } else { + NSString * errorResponse = [NSString stringWithFormat:@"%ld: %@", statusCode, [NSHTTPURLResponse localizedStringForStatusCode: statusCode]]; + callback(@[errorResponse, [NSNull null]]); + } } - (NSString *)generateBoundaryString diff --git a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java index f072fe0..5849637 100644 --- a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java +++ b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java @@ -142,11 +142,11 @@ public void upload(final ReadableMap options, final Callback callback) { int serverResponseCode = connection.getResponseCode(); String serverResponseMessage = connection.getResponseMessage(); - if (serverResponseCode != 200) { + if (!((serverResponseCode >= 200) && (serverResponseCode < 300))) { fileInputStream.close(); outputStream.flush(); outputStream.close(); - callback.invoke("Error happened: " + serverResponseMessage, null); + callback.invoke(serverResponseCode + ": " + serverResponseMessage, null); } else { BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder sb = new StringBuilder(); From 3ad687dab9a424310ce9b29532c3c35a68664cb4 Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Wed, 16 Mar 2016 19:23:09 +0200 Subject: [PATCH 4/5] use content resolver for URI paths --- .../java/com/yoloci/fileupload/FileUploadModule.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java index 5849637..d20a248 100644 --- a/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java +++ b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java @@ -1,5 +1,6 @@ package com.yoloci.fileupload; +import android.net.Uri; import android.os.Bundle; import com.facebook.react.bridge.Arguments; @@ -12,6 +13,7 @@ import com.facebook.react.bridge.Callback; import java.io.DataInputStream; +import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.io.DataOutputStream; @@ -25,6 +27,8 @@ public class FileUploadModule extends ReactContextBaseJavaModule { + private final ReactApplicationContext _reactContext; + @Override public String getName() { return "FileUpload"; @@ -32,6 +36,7 @@ public String getName() { public FileUploadModule(ReactApplicationContext reactContext) { super(reactContext); + _reactContext = reactContext; } @ReactMethod @@ -58,7 +63,7 @@ public void upload(final ReadableMap options, final Callback callback) { DataOutputStream outputStream = null; DataInputStream inputStream = null; URL connectURL = null; - FileInputStream fileInputStream = null; + InputStream fileInputStream = null; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; @@ -111,8 +116,7 @@ public void upload(final ReadableMap options, final Callback callback) { String filename = file.getString("filename"); String filepath = file.getString("filepath"); String filetype = file.getString("filetype"); - filepath = filepath.replace("file://", ""); - fileInputStream = new FileInputStream(filepath); + fileInputStream = _reactContext.getContentResolver().openInputStream(Uri.parse(filepath)); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"" + name + "\";filename=\"" + filename + "\"" + lineEnd); From 9420f64885d777a086597fadfbed544278574e7f Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Tue, 16 Jan 2018 16:57:49 +0100 Subject: [PATCH 5/5] update react-native dependency --- android/build.gradle | 6 +++--- .../main/java/com/yoloci/fileupload/FileUploadPackage.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 6fd85e4..f45decd 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -11,8 +11,8 @@ buildscript { apply plugin: 'com.android.library' android { - compileSdkVersion 23 - buildToolsVersion "23.0.1" + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { minSdkVersion 16 @@ -30,5 +30,5 @@ repositories { } dependencies { - compile 'com.facebook.react:react-native:0.15.+' + compile "com.facebook.react:react-native:+" } diff --git a/android/src/main/java/com/yoloci/fileupload/FileUploadPackage.java b/android/src/main/java/com/yoloci/fileupload/FileUploadPackage.java index 3f23678..e245477 100644 --- a/android/src/main/java/com/yoloci/fileupload/FileUploadPackage.java +++ b/android/src/main/java/com/yoloci/fileupload/FileUploadPackage.java @@ -30,7 +30,7 @@ public List createNativeModules( return modules; } - @Override + // Deprecated from RN 0.47 public List> createJSModules() { return Collections.emptyList(); } @@ -39,4 +39,4 @@ public List> createJSModules() { public List createViewManagers(ReactApplicationContext reactContext) { return Arrays.asList(); } -} \ No newline at end of file +}