2016-08-08 6 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] 

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

@David

Модернизированный dropwizard 0.8.0 однако врезался в другую ошибку

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

не Учитывая ошибку «нет многочастной конфигурации для сервлета» Я предполагаю, что ваша загрузка не работает на всех, без чека размера?

+0

мне нужно использовать версию 0.7.0 и зависимость на месте com.sun.jersey.contribs Джерси-многочастному 1.18.1 Хотя размер проверка не может быть выполнена, я могу загрузить файл. Я также попытался установить многострочный элемент конфигурации в фильтр final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement ("", 102400, -1L, -1); ServletRequest.setAttribute (запрос .__ MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG); – Manohar

+2

Наблюдаемая парочка вещей FormDataContentDisposition.getSize() return -1 Добавление фильтра с элементом multipart config вызывает ошибку java.io.IOException: Отсутствует содержимое для многостраничного запроса \t на 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

Смежные вопросы