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 }