2015-12-07 4 views
2

У меня есть реализация, аналогичная this one, которая позволяет вызывающему пользователю запрашивать определенный файл из файловой системы. Файл является тем, который не изменяется часто и загружается мобильным приложением. Есть ли способ изменить это, чтобы использовать код статуса 304 - Not Modified HTTP, чтобы клиенту не пришлось загружать файл, когда он не изменился? Если да, то интерфейс этого метода должен каким-то образом изменить дату? Есть ли стандартный способ реализации этого?Как изменить контроллер Spring для предотвращения загрузки файла, который не изменился

@RequestMapping(value = "/files/datafile", method = RequestMethod.GET) 
public void getDataFile(HttpServletResponse response) { 
    try { 
     // get your file as InputStream 
     InputStream is = ...; 
     // copy it to response's OutputStream 
     org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); 
     response.flushBuffer(); 
    } catch (IOException ex) { 
     log.info("Error writing file to output stream. Filename was '{}'", fileName, ex); 
     throw new RuntimeException("IOError writing file to output stream"); 
    } 

} 

ответ

0

Использование Springs ETag Header поддержка.

Вам просто нужно добавить этот фильтр к вашему web.xml

<filter> 
    <filter-name>etagFilter</filter-name> 
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>etagFilter</filter-name> 
    <servlet-name>petclinic</servlet-name> 
</filter-mapping> 

Или вы делаете это более сложный в контроллере:

+0

не код клиента нужно ли менять, а? Как сервер знал бы, что значение не изменилось, если клиент не предоставил хэш старого значения? –

+0

Если ваш клиент не старый веб-браузер, он должен работать. Ключ заключается в том, что клиент отправляет заголовок etag в браузер обратно, если он запрашивает тот же URL-адрес, что и сервер может решить, должен ли он отправлять содержимое или просто код состояния, который ничего не изменил. – Ralph

+0

Клиент - мобильное приложение. –

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

  • Нет связанных вопросов^_^