diff --git a/pom.xml b/pom.xml
index ed90c4c..c9120b0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,5 +6,5 @@
4.0.0
io.ionic.libs
ionfiletransfer-android
- 0.0.1-dev-1
+ 0.0.1-dev-4
\ No newline at end of file
diff --git a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/IONFLTRController.kt b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/IONFLTRController.kt
index 4ab0584..bd440f1 100644
--- a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/IONFLTRController.kt
+++ b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/IONFLTRController.kt
@@ -23,6 +23,7 @@ import java.io.BufferedOutputStream
import java.io.File
import java.io.FileOutputStream
import java.net.HttpURLConnection
+import java.net.URI
/**
* Entry point in IONFileTransferLib-Android
@@ -118,11 +119,11 @@ class IONFLTRController internal constructor(
*/
private fun prepareForDownload(options: IONFLTRDownloadOptions): Pair {
// Validate inputs
- inputsValidator.validateTransferInputs(options.url, options.filePath)
+ val normalizedFilePath = fileHelper.normalizeFilePath(options.filePath)
+ inputsValidator.validateTransferInputs(options.url, normalizedFilePath)
// Create parent directories if needed
- val normalizedFilePath = fileHelper.normalizeFilePath(options.filePath)
- val targetFile = File(normalizedFilePath)
+ val targetFile = File(URI(normalizedFilePath).path)
fileHelper.createParentDirectories(targetFile)
// Setup connection
diff --git a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRFileHelper.kt b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRFileHelper.kt
index cdcb012..c83a83e 100644
--- a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRFileHelper.kt
+++ b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRFileHelper.kt
@@ -12,6 +12,9 @@ import java.io.File
import java.io.FileInputStream
import java.io.InputStream
import androidx.core.net.toUri
+import java.net.URI
+import java.net.URLDecoder
+import java.net.URLEncoder
internal class IONFLTRFileHelper(val contentResolver: ContentResolver) {
/**
@@ -35,7 +38,7 @@ internal class IONFLTRFileHelper(val contentResolver: ContentResolver) {
}
} else {
val cleanFilePath = normalizeFilePath(filePath)
- val fileObject = File(cleanFilePath)
+ val fileObject = File(URI(cleanFilePath).path)
if (!fileObject.exists()) {
throw IONFLTRException.FileDoesNotExist()
}
@@ -50,12 +53,17 @@ internal class IONFLTRFileHelper(val contentResolver: ContentResolver) {
* @return Cleaned file path without URI prefixes
*/
fun normalizeFilePath(filePath: String): String {
- return when {
+ val path = when {
filePath.startsWith("file://") -> filePath.removePrefix("file://")
filePath.startsWith("file:/") -> filePath.removePrefix("file:/")
filePath.startsWith("file:") -> filePath.removePrefix("file:")
else -> filePath
}
+
+ return URLEncoder.encode(
+ URLDecoder.decode(path, Charsets.UTF_8.toString()),
+ Charsets.UTF_8.toString()
+ ).replace("+", "%20")
}
/**
diff --git a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRInputsValidator.kt b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRInputsValidator.kt
index 93faaa5..2adb929 100644
--- a/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRInputsValidator.kt
+++ b/src/main/kotlin/io/ionic/libs/ionfiletransferlib/helpers/IONFLTRInputsValidator.kt
@@ -5,6 +5,7 @@ import java.util.regex.Pattern
import java.io.File
import java.net.URI
import java.net.URISyntaxException
+import java.net.URLEncoder
internal class IONFLTRInputsValidator {
@@ -34,17 +35,8 @@ internal class IONFLTRInputsValidator {
}
return try {
- val resolvedPath: String
- if (path.startsWith("file://")) {
- val uri = URI(path)
- if (uri.path == null) {
- return false
- }
- resolvedPath = uri.path
- } else {
- resolvedPath = path
- }
- File(resolvedPath).isAbsolute
+ val uri = URI(path).path
+ File(uri).isAbsolute
} catch (e: URISyntaxException) {
false
}