making the file upload file creation all happen on the IO dispatcher
This commit is contained in:
parent
55c0f1fcb3
commit
18b38fe21e
|
@ -109,18 +109,23 @@ internal class FileUploader @Inject constructor(
|
||||||
filename: String?,
|
filename: String?,
|
||||||
mimeType: String?,
|
mimeType: String?,
|
||||||
progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse {
|
progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse {
|
||||||
val inputStream = withContext(Dispatchers.IO) {
|
val workingFile = context.copyUriToTempFile(uri)
|
||||||
context.contentResolver.openInputStream(uri)
|
|
||||||
} ?: throw FileNotFoundException()
|
|
||||||
val workingFile = temporaryFileCreator.create()
|
|
||||||
workingFile.outputStream().use {
|
|
||||||
inputStream.copyTo(it)
|
|
||||||
}
|
|
||||||
return uploadFile(workingFile, filename, mimeType, progressListener).also {
|
return uploadFile(workingFile, filename, mimeType, progressListener).also {
|
||||||
tryOrNull { workingFile.delete() }
|
tryOrNull { workingFile.delete() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun Context.copyUriToTempFile(uri: Uri): File {
|
||||||
|
return withContext(Dispatchers.IO) {
|
||||||
|
val inputStream = contentResolver.openInputStream(uri) ?: throw FileNotFoundException()
|
||||||
|
val workingFile = temporaryFileCreator.create()
|
||||||
|
workingFile.outputStream().use {
|
||||||
|
inputStream.copyTo(it)
|
||||||
|
}
|
||||||
|
workingFile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private suspend fun upload(uploadBody: RequestBody,
|
private suspend fun upload(uploadBody: RequestBody,
|
||||||
filename: String?,
|
filename: String?,
|
||||||
progressListener: ProgressRequestBody.Listener?): ContentUploadResponse {
|
progressListener: ProgressRequestBody.Listener?): ContentUploadResponse {
|
||||||
|
|
Loading…
Reference in New Issue