У меня есть реализация, аналогичная 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");
}
}
не код клиента нужно ли менять, а? Как сервер знал бы, что значение не изменилось, если клиент не предоставил хэш старого значения? –
Если ваш клиент не старый веб-браузер, он должен работать. Ключ заключается в том, что клиент отправляет заголовок etag в браузер обратно, если он запрашивает тот же URL-адрес, что и сервер может решить, должен ли он отправлять содержимое или просто код состояния, который ничего не изменил. – Ralph
Клиент - мобильное приложение. –