Fuel android загружает файлы большого размера

#android #android-download-manager #fuel

#Android #android-download-manager #топливо

Вопрос:

Я использую Fuel в своем коде Android для загрузки таких материалов, как PDF, аудио, видео, и это работает хорошо, проблема возникает, когда я хочу загрузить большой файл (50 МБ и> файл). Я читал о назначении потока топлива, но понятия не имею, как решить эту проблему. Вот мой код :

 Fuel.download("https://$url")
                .fileDestination { response, url ->
                    File(path, fileName)
                }

                .timeout(5000)
                .response { request, response, result ->

                    result.fold(

                        success = {

                            progressDialog.dismissDialog()
                            listener.onDocDownloaded(fileName)
                        },
                        
                        failure = {

                            progressDialog.dismissDialog()
                                
                                   }
                            
                }
 

Ответ №1:

Я нахожу решение благодаря Дерку-Яну Карренбельду. Здесь я просто помещаю рабочий код :

         val outputStream = FileOutputStream(File(filePath))

        _downloadStatus.postValue(FileDownloadStatus.Downloading)

        Fuel.download(httpsedUrl)
            .streamDestination { response, _ -> Pair(outputStream, { response.body().toStream() }) }
            .fileDestination{response, request ->
                File(filePath)
            }
            .progress { readBytes, totalBytes ->
                val progress = readBytes.toFloat() / totalBytes.toFloat() * 100
                println("Bytes downloaded $readBytes / $totalBytes ($progress %)")
            }
            .response { result ->

                result.fold(
                        success = {
                            _downloadStatus.postValue(FileDownloadStatus.Downloaded)
                        },
                        failure = {
                            _downloadStatus.postValue(it.message?.let { it1 -> FileDownloadStatus.Failed(it1) })
                        }
                )
            }