2016-06-23 11 views
2

以下のコードを使用してfileuploadを処理していますが、300 MBを超えるファイルをアップロードしているときにOutOfMemoryErrorを取得しています。誰もがこの問題で私を助けることができる大きなファイルをアップロードするときにJersey2クライアントのOutOfMemoryError

はここ

package com.actifio.service.foresight; 

import java.io.File; 
import java.io.IOException; 

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.Entity; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.Response; 

import org.glassfish.jersey.media.multipart.FormDataMultiPart; 
import org.glassfish.jersey.media.multipart.MultiPartFeature; 
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart; 

public class UploadFileTest { 
    public static void main(String[] args) throws IOException { 
     final Client client = ClientBuilder.newBuilder() 
       .register(MultiPartFeature.class).build(); 

     final FileDataBodyPart filePart = new FileDataBodyPart("file", 
       new File("C:/temp/sample.pdf")); 
     FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
     final FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart 
       .field("foo", "bar").bodyPart(filePart); 

     final WebTarget target = client 
       .target("http://localhost:8080/JerseyDemos/rest/upload/pdf"); 
     final Response response = target.request().post(
       Entity.entity(multipart, multipart.getMediaType())); 

     // Use response object to verify upload success 

     formDataMultiPart.close(); 
     multipart.close(); 
    } 
} 

以下の私のコードだが、私は、Javaヒープ領域の例外を取得しています、詳細は以下を

javax.ws.rs.ProcessingException: Java heap space 
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:263) 
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671) 
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
at 

をチェック!

+0

あなたの最大のJavaヒープサイズの値は何ですか?あなたのサーバーのファイルで何をやっていますか? –

答えて

1

あなたがchunksとストリームを使用する必要があります。

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(FormDataMultiPart formDataMultiPart) { 
    FormDataBodyPart filePart = formDataMultiPart.getField("file");   
    InputStream fileInputStream = filePart.getValueAs(InputStream.class); 
    . 
    . 
    . 
} 
関連する問題