2016-06-23 14 views
2

Ich arbeite auf Dateiupload mit Code unter, aber während ich mehr als 300 MB Datei hochladen, bekomme ich OutOfMemoryError.Jersey2 Client OutOfMemoryError beim Hochladen großer Datei

Hier ist mein Code unten

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(); 
    } 
} 

Aber ich bin immer Java Heap-Speicher Ausnahme, unten überprüfen, um weitere Informationen

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 

mir jemand zu diesem Thema helfen?

+0

Was ist der Wert der maximalen Java Heap-Größe? Was machst du mit der Datei auf deinem Server? –

Antwort

1

sollten Sie chunks und Bäche verwenden:

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(FormDataMultiPart formDataMultiPart) { 
    FormDataBodyPart filePart = formDataMultiPart.getField("file");   
    InputStream fileInputStream = filePart.getValueAs(InputStream.class); 
    . 
    . 
    . 
} 
Verwandte Themen