我有一个类似于this one的实现,它允许调用者从文件系统中请求一个特定的文件。该文件不会经常更改,并且正由移动应用程序下载。有没有办法我可以改变它使用304 - 未修改的HTTP状态代码,以便客户端在没有更改时不必下载文件?如果是这样,此方法的接口是否必须以某种方式更改以接受日期?有没有一些标准的方法来实现这个?
@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 :(得分: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>
或者你在控制器中做得更复杂:
ResponseEntity
而不是直接使用HttpResponse
,如Spring Reference Chapter 21.14.3 Support for the Cache-Control, ETag and Last-Modified response headers in Controllers中所述。 HttpResponse
:RFC 2616 Chapter 14.19 ETag