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/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/FileUploadModule.java b/android/src/main/java/com/yoloci/fileupload/FileUploadModule.java index 1c01743..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; @@ -107,13 +112,15 @@ 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); + String filetype = file.getString("filetype"); + fileInputStream = _reactContext.getContentResolver().openInputStream(Uri.parse(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("Content-Type: " + filetype + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); @@ -139,11 +146,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(); 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 +}