2014-09-03 1 views
1

Я настроил канал REST для загрузки файла в соответствии со статьей IBM http://www-01.ibm.com/support/knowledgecenter/SS7K4U_7.0.0/com.ibm.websphere.web2mobile.mobile.application.services.help/docs/fileuploader_README.html?cp=SS7K4U_7.0.0%2F8-13-3:Websphere REST загрузки - не загружать загруженный файл в память

import org.apache.wink.common.model.multipart.BufferedInMultiPart; 

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/upload") 
public RestResult upload(BufferedInMultiPart bimp) { 
    List<InPart> parts = bimp.getParts(); 
    // .... 
} 

я добавил потребление тест потока, просто чтобы убедиться, что запрос полностью обработан:

IOUtils.copy(part.getInputStream(), new NullOutputStream()); 

Я тестировал все с действительно большими загрузками - около 100 МБ. Я заметил резкое увеличение использования памяти на сервере Websphere, намного больше, загружая небольшие файлы. Я предполагаю, что это вызвано загрузкой загруженного файла в память после загрузки и перед вызовом моей функции upload.

Возможно ли настроить инструмент так, чтобы большие файлы считывались в некоторый временный файл, а не в память?

Или возможно стать входящим входным потоком непосредственно в методе REST-канала?

Я использую каналы Websphere 8.5 и JAX-WS REST.

ответ

2

Согласно Apache Wink документации нашел here, кажется, что BufferedInMultiPart хранит полный файл в память, поэтому попробуйте заменить BufferedInMultiPart с InMultiPart:

import org.apache.wink.common.model.multipart.InMultiPart; 

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/upload") 
public RestResult upload(InMultiPart bimp) { 
    List<InPart> parts = new ArrayList<InPart>(); 
    while(bimp.hasNext()) { 
     parts.add(bimp.next()); 
    } 
    // .... 
} 
+0

Да, я хотел бы написать, что в качестве комментария к этому IBM но вам нужен идентификатор IBM ID: –

+0

@Donaudampfschifffreizeitfahrt Если вы хотите, вы все равно можете. Это бесплатная регистрация здесь - https://www.ibm.com/account/profile/us?page=reg также позволит вам участвовать в форумах developerWorks. :-) – Gas