2016-08-08 61 views
1

Ich verwende Dropwizard 0.7.0, um eine API für den Dateiupload zu erstellen. In Schwierigkeiten geraten, die hochgeladene Dateigrößenbeschränkung zu validieren. Ich mag die Größe überprüfen, bevor Sie die Datei auf der FestplatteSo ermitteln Sie die Größe einer Datei, die über die Dropwizard-REST-API hochgeladen wurde

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.TEXT_PLAIN) 
public Response uploadFile(@Context final HttpServletRequest request, @FormDataParam("file") FormDataBodyPart fileBodyPart) { 

    /* 
    * Check the request size 
    */ 
    request.getPart("file").getSize(); 
......... 
} 

schreibt es ein Fehler wirft:

java.lang.IllegalStateException: No multipart config for servlet 
at org.eclipse.jetty.server.Request.getParts(Request.java:2075) ~[jetty- server-9.0.7.v20131107.jar:9.0.7.v20131107] 
at org.eclipse.jetty.server.Request.getPart(Request.java:2055) ~[jetty-server-9.0.7.v20131107.jar:9.0.7.v20131107] 

EDIT ------------------ ----

@ David

Upgraded 0.8.0 jedoch dropwizard in einen anderen Fehler lief

com.sun.jersey.spi.inject.Errors: The following errors and warnings have been detected with resource and/or provider classes: 
org.glassfish.jersey.media.multipart.file.FormDataBodyPart 
org.glassfish.jersey.media.multipart.file.FileDataBodyPart 
org.glassfish.jersey.media.multipart.FormDataContentDisposition 

diese Abhängigkeiten Mit

<dependency> 
<groupId>io.dropwizard</groupId> 
<artifactId>dropwizard-forms</artifactId> 
<version>${dropwizard.version}</version> 
</dependency> 

und

<dependency> 
<groupId>org.glassfish.jersey.media</groupId> 
<artifactId>jersey-media-multipart</artifactId> 
<version>2.23.2</version> 
</dependency> 

hinzugefügt

bootstrap.addBundle(new MultiPartBundle()); 

und auch das (nach dem ersten Ausfall)

env.jersey().register(MultiPartFeature.class); 

Was fehlt mir hier?

Antwort

2

Um mehrteilige Daten übermitteln zu können, ist eine zusätzliche Dropwizard-Abhängigkeit erforderlich. Für 0,8 und höher ist die Abhängigkeit dropwizard-forms.

<dependency> 
    <groupId>io.dropwizard</groupId> 
    <artifactId>dropwizard-forms</artifactId> 
    <version>${dropwizard.version}</version> 
</dependency> 

http://www.dropwizard.io/0.8.0/docs/manual/forms.html

Beispiel Nutzung:

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
     @FormDataParam("myFileName") InputStream file, 
     @FormDataParam("myFileName") FormDataContentDisposition fileMetaData 
){ 

    long fileSize = fileMetaData.getSize(); 
    // etc 
} 

Dies ist, was ich verwende. Vielleicht ist Upgrading eine Lösung für Sie.

Wenn nicht, ist es möglich, dropwizard 0,7, aber ich habe es nicht zu tun hatte ... Von einer schnellen Google sieht es aus wie Sie die folgende Abhängigkeit benötigen:

<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-multipart</artifactId> 
    <version>1.18.1</version> 
</dependency> 

... und fügen Sie den folgenden, um Ihre Anwendungen run Methode:

environment.jersey().register(MultiPartFeature.class); 

der Fehler „No mehrt Config für Servlet“ Da gehe ich davon aus Upload überhaupt nicht arbeiten, ohne Ihre Größe Scheck?

+0

Ich brauche die 0.7.0 Version und die Abhängigkeit ist in Ort com.sun.jersey.contribs Jersey-mehrt 1.18.1 Auch wenn die Größe zu verwenden, Überprüfung kann nicht durchgeführt werden, ich kann eine Datei hochladen. Ich habe auch versucht final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement ("", 102400, -1L, -1), um das mehrteiligen Config Element in einem Filter zu setzen; ServletRequest.setAttribute (Anforderung .__ MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG); – Manohar

+2

Einige Dinge beobachtet FormDataContentDisposition.getSize() return -1 Das Hinzufügen eines Filters mit dem multipart-config-Element führt zu einem Fehler java.io.IOException: Fehlender Inhalt für die mehrteilige Anfrage \t at org.eclipse.jetty.util.MultiPartInputStreamParser.parse (MultiPartInputStreamParser.java:494) \t bei org.eclipse.jetty.util.MultiPartInputStreamParser.getParts (MultiPartInputStreamParser.java:402) \t bei org.eclipse.jetty.server.Request.getParts (Request.java:2083) \t bei org.eclipse.jetty.server.Request.getPart (Request.java:2055) – Manohar