Я хочу отправить изображение PDF на сервер в Android.
Для спецификации сервера мне нужно использовать кодировку Base64.
Поэтому я должен преобразовать файл изображения PDF в строку Base64.
Ниже приведен HTTP-запрос POST:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<auth>
<!-- auth info -->
</auth>
<imagefile>
<filename>Test Attachment</filename>
<type>pdf</type>
<data>"HERE IS BASE64 String"</data>
</imagefile>
</request>
И я использовал приведенный ниже код, это просто Http-код запроса поста.
fun post(url: String, xml: String) = Observable.defer {
val request = Request.Builder()
.url(url)
.post(RequestBody.create(contentType, xml))
.build()
okHttpClient.newCall(request).execute()
}
В случае малогоPDF-файл, все в порядке.(Работает нормально)
Но когда я использовал большой файл PDF (более 20 МБ), возникает нехватка памяти.
Поэтому я попробовал другой способ, подобный приведенному ниже.
fun post(url: String, xmlFile: File) = Observable.defer {
val request = Request.Builder()
.url(url)
.post(RequestBody.create(contentType, xmlFile))
.build()
okHttpClient.newCall(request).execute()
}
Разница в том, что я не использую String, а File.
Я создал файл, используя закодированный в Base64 текст с синтаксисом XML.
Но это тоже не удалось.
Как отправить большие данные в Android без OOM?