2016-08-08 2 views
1

Dropwizard 0.7.0을 사용하여 파일 업로드 용 API를 작성하고 있습니다. 업로드 된 파일 크기 제한의 유효성을 검사하는 데 문제가 있습니다. ------------------Dropwizard REST API를 통해 업로드 된 파일의 크기를 찾는 방법

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] 

편집 : 나는 그것이 오류가 발생 디스크

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

에 파일을 쓰기 전에 크기를 확인하려면 ----

@ 데이비드

그러나 다른 오류

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 
로 실행 0.8.0을 dropwizard로 업그레이드

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

(제 1 장애 후)도 이러한 종속성

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

을 첨가하고,이를 이용 3,691,363,210

나는 무엇을 여기에서 놓치고 있냐?

답변

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> 

를 ... 그리고

"서블릿 없음 다중 설정"오류가 제공되지
environment.jersey().register(MultiPartFeature.class); 

내가 업로드가 전혀 작동하지 않습니다 있으리라 믿고있어 귀하의 크기를 확인하지 않고 다음 응용 프로그램에 다음과 같은 run 방법을 추가? com.sun.jersey.contribs 저지 - 다중 1.18.1 에도 크기 생각을

+0

본인은 0.7.0 버전을 사용해야하고, 의존성이 자리에 확인을 수행 할 수 없으면 파일을 업로드 할 수 있습니다. 또한 멀티 파트 구성 요소를 필터에 설정하려고했습니다. 최종 MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement ("", 102400, -1L, -1); ServletRequest.setAttribute (요청 .__ MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG); – Manohar

+2

FormDataContentDisposition.getSize() 반환 -1 multipart 구성 요소가있는 필터를 추가하면 오류가 발생합니다. java.io.IOException : 다중 요청에 대한 내용이 누락되었습니다. \t at org.eclipse.jetty.util.MultiPartInputStreamParser.parse (MultiPartInputStreamParser.java:494) org.eclipse.jetty.util.MultiPartInputStreamParser.getParts (MultiPartInputStreamParser.java:402) org.eclipse.jetty.server.Request.getParts에서 \t (Request.java:2083) \t에서 \t org.eclipse.jetty.server.Request.getPart (Request.java:2055) – Manohar

관련 문제