2016-08-08 49 views
1

我正在使用Dropwizard 0.7.0構建用於文件上傳的API。無法驗證上傳的文件大小限制。我想文件寫入到磁盤如何查找通過Dropwizard REST API上傳的文件的大小

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

它拋出一個錯誤之前檢查大小:

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] 

編輯------------------ ----

@大衛

升級到0.8.0 dropwizard然而跑進另一個錯誤

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 

使用這些依賴

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

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

加入

bootstrap.addBundle(new MultiPartBundle()); 

和這個太(後第一次失敗)

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

我在這裏錯過了什麼?

回答

2

能夠提交多部分數據需要額外的dropwizard依賴。對於0.8和更高的依賴關係是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

用法示例:

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

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

這是我使用的是什麼。也許升級對你來說是一個解決方案。

如果不是,它是可能的dropwizard 0.7,但我還沒有做到這一點......從一個快速谷歌,它看起來像你需要以下依賴性:

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

...和以下內容添加到您的應用程序run方法:

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

由於錯誤「的servlet沒有多配置」我假設你的上傳不會在所有的工作,沒有你的尺寸檢查?

+0

我需要使用0.7.0版本和依賴到位 com.sun.jersey.contribs 球衣,多 1.18.1 即使大小檢查不能執行,我可以上傳一個文件。我試圖在過濾器中設置多部分配置元素。 final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement(「」,102400,-1L,-1); ServletRequest.setAttribute(Request .__ MULTIPART_CONFIG_ELEMENT,MULTI_PART_CONFIG); – Manohar

+2

觀察一些事情FormDataContentDisposition.getSize()返回-1添加一個多部分配置元素的過濾器會產生一個錯誤java.io.IOException:缺少多部分請求的內容 \t at org.eclipse.jetty.util.MultiPartInputStreamParser.parse( MultiPartInputStreamParser.java:494) \t在org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:402) \t在org.eclipse.jetty.server.Request.getParts(Request.java:2083) \t在org.eclipse.jetty.server.Request.getPart(Request.java:2055) – Manohar

相關問題