Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
287 changes: 168 additions & 119 deletions README.md

Large diffs are not rendered by default.

Binary file added android/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 5 additions & 0 deletions android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
185 changes: 185 additions & 0 deletions android/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

89 changes: 89 additions & 0 deletions android/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 45 additions & 6 deletions android/src/main/java/com/vydia/RNUploader/UploaderModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,24 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa
*/
@ReactMethod
fun startUpload(options: ReadableMap, promise: Promise) {
for (key in arrayOf("url", "path")) {
val mandatoryParamsList: MutableList<String> = mutableListOf("url")
if (options.hasKey("files")) {
if (options.getType("files") != ReadableType.Array) {
promise.reject(java.lang.IllegalArgumentException("files must be an array."))
return
}
val files = options.getArray("files")
for (i in 0 until files!!.size()) {
val file = files.getMap(i)
if (!file.hasKey("path")) {
promise.reject(java.lang.IllegalArgumentException("Missing path field in files"))
return
}
}
} else {
mandatoryParamsList.add("path")
}
for (key in mandatoryParamsList) {
if (!options.hasKey(key)) {
promise.reject(java.lang.IllegalArgumentException("Missing '$key' field."))
return
Expand All @@ -146,7 +163,10 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa
}
configureUploadServiceHTTPStack(options, promise)
var requestType: String? = "raw"
if (options.hasKey("type")) {
val files = options.getArray("files")
if (files != null) {
requestType = "multipart";
} else if (options.hasKey("type")) {
requestType = options.getString("type")
if (requestType == null) {
promise.reject(java.lang.IllegalArgumentException("type must be string."))
Expand Down Expand Up @@ -186,7 +206,14 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa
val maxRetries = if (options.hasKey("maxRetries") && options.getType("maxRetries") == ReadableType.Number) options.getInt("maxRetries") else 2
val customUploadId = if (options.hasKey("customUploadId") && options.getType("method") == ReadableType.String) options.getString("customUploadId") else null
try {
val request = if (requestType == "raw") {
val request = if (files != null) {
var request = MultipartUploadRequest(this.reactApplicationContext, url!!)
for (i in 0 until files.size()) {
val file = files.getMap(i)
request = request.addFileToUpload(file.getString("path")!!, file.getString("field") ?: "file${i}")
}
request
} else if (requestType == "raw") {
BinaryUploadRequest(this.reactApplicationContext, url!!)
.setFileToUpload(filePath!!)
} else {
Expand Down Expand Up @@ -238,11 +265,23 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa
val keys = parameters!!.keySetIterator()
while (keys.hasNextKey()) {
val key = keys.nextKey()
if (parameters.getType(key) != ReadableType.String) {
promise.reject(java.lang.IllegalArgumentException("Parameters must be string key/values. Value was invalid for '$key'"))
if (parameters.getType(key) != ReadableType.String && parameters.getType(key) != ReadableType.Array) {
promise.reject(java.lang.IllegalArgumentException("Parameters must be string key/values or array key/List<String>. Value was invalid for '$key'"))
return
}
request.addParameter(key, parameters.getString(key)!!)
if(parameters.getType(key) == ReadableType.String){
request.addParameter(key, parameters.getString(key)!!)
}else{
val valuesParams = parameters.getArray(key)!!
val convertedValue = mutableListOf<String>()
for(i in 0 until valuesParams.size()){
val str = valuesParams.getString(i)
println("Log: $str")
convertedValue.add(str)
}
request.addArrayParameter(key, convertedValue)
}

}
}
if (options.hasKey("headers")) {
Expand Down
9 changes: 9 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,15 @@ declare module "react-native-background-upload" {
export interface UploadOptions {
url: string;
path: string;
/**
* Android only, to upload multiple files in one request via multipart
* `path` & `field` will be ignored and `type` will be multipart if `files` is available
*/
files?: {
path: string;
// Fallback to file0, file1, file2 etc
field?: string;
};
type?: 'raw' | 'multipart';
method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE';
customUploadId?: string;
Expand Down