Java 使用改型上载大型Base64编码文件的正确方法是什么?
所以我正在使用下面使用okhttp的翻新2。下面的代码片段可以正常工作,但对于大文件,我会遇到OOM错误。 我相信这是因为我正在将文件读入字节数组 推荐的处理方法是什么Java 使用改型上载大型Base64编码文件的正确方法是什么?,java,base64,retrofit2,okhttp,Java,Base64,Retrofit2,Okhttp,所以我正在使用下面使用okhttp的翻新2。下面的代码片段可以正常工作,但对于大文件,我会遇到OOM错误。 我相信这是因为我正在将文件读入字节数组 推荐的处理方法是什么 private void appendFileContentsToBody(Attachment attachment, MultipartBody.Builder requestBodyBuilder) throws IOException { File file = new File(attachment.getAb
private void appendFileContentsToBody(Attachment attachment, MultipartBody.Builder requestBodyBuilder) throws IOException {
File file = new File(attachment.getAbsolutePath());
if(file.exists()){
RequestBody attachmentPart = RequestBody.create(null, Base64.getEncoder().encode(FileUtils.readFileToByteArray(file)));
requestBodyBuilder.addPart(Headers.of("X-Filename", attachment.getFilename()), attachmentPart);
}
}
您不应该在发送文件之前将其编码到Base64中,这应该使用stream来完成,这将通过为您改装来完成。所以你的代码应该是
private void appendFileContentsToBody(Attachment attachment, MultipartBody.Builder requestBodyBuilder) throws IOException {
File file = new File(attachment.getAbsolutePath());
if(file.exists()){
RequestBody attachmentPart = RequestBody.create(MediaType.parse("application/pdf"), file);
requestBodyBuilder.addPart(Headers.of("X-Filename", attachment.getFilename()), attachmentPart);
}
}
其中“application/pdf”-是特定文件的MIME类型。这样你就永远不会遭受痛苦。然而,这种方法可能首先在后端实现,因为现在您的后端实现似乎只适用于web应用,因为它需要请求正文中的编码文件。您不应该在发送文件之前将文件编码到Base64中,这应该使用stream来完成,这将通过为您改装来完成。所以你的代码应该是
private void appendFileContentsToBody(Attachment attachment, MultipartBody.Builder requestBodyBuilder) throws IOException {
File file = new File(attachment.getAbsolutePath());
if(file.exists()){
RequestBody attachmentPart = RequestBody.create(MediaType.parse("application/pdf"), file);
requestBodyBuilder.addPart(Headers.of("X-Filename", attachment.getFilename()), attachmentPart);
}
}
其中“application/pdf”-是特定文件的MIME类型。这样你就永远不会遭受痛苦。然而,这种方法可能首先在后端实现,因为现在您的后端实现似乎只适用于web应用程序,因为它希望在请求体中包含编码文件