gpt4 book ai didi

android - 发送大数据OkHttp3 outofmemory

转载 作者:行者123 更新时间:2023-11-29 23:22:28 27 4
gpt4 key购买 nike

我想在 Android 中将 PDF 图像发送到服务器。

服务器规范需要我应该使用 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 post 请求代码。

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文件(超过20MB)时,内存不足。

所以我尝试了另一种方式,如下所示。

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。

我使用具有 XML 语法的 Base64 编码文本创建了一个文件。

但是也失败了。

如何在没有OOM的情况下在Android中发送大数据?

最佳答案

您将需要找到一个流式 base64 编码器并使用它来编写一个流式传输到服务器的 RequestBody。 OkHttp 或 Okio 没有内置此类编码器,但您可以使用 Android 本身中的编码器。在您将在自定义 RequestBody 的 writeTo 方法中获得的 OutputStream 上使用 wrap。

https://developer.android.com/reference/java/util/Base64.Encoder

关于android - 发送大数据OkHttp3 outofmemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54035531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com