Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用改型上载大型Base64编码文件的正确方法是什么?_Java_Base64_Retrofit2_Okhttp - Fatal编程技术网

Java 使用改型上载大型Base64编码文件的正确方法是什么?

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

所以我正在使用下面使用okhttp的翻新2。下面的代码片段可以正常工作,但对于大文件,我会遇到OOM错误。 我相信这是因为我正在将文件读入字节数组

推荐的处理方法是什么

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应用程序,因为它希望在请求体中包含编码文件