如何在classpath之外加载资源?

时间:2015-05-18 19:32:41

标签: java spring resources

我在webapplication中使用spring框架,我想加载存储在classpath外部的资源(* .jpeg)。

我正在调用某个控制器的/ext/media/photos/photo.png方法。当我从类路径调用照片时它可以工作。但当我打电话给路径时: file:/ext/media/photos/photo.png/home/user/ext/media/photos/photo.pnghttp://some-web-image@RequestMapping(value = "/loadPhoto", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE) public ResponseEntity<byte[]> loadPhoto() throws IOException { InputStream in = servletContext.getResourceAsStream("/ext/media/photos/photo.png"); return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), HttpStatus.CREATED); } ,它不起作用。

<mvc:resources mapping="/ext/media/photos/**" location="file:/home/user/ext/media/photos/"/>

我尝试在春天环境中将网址映射到真实位置

{{1}}

但我仍然无法获得资源。这是如何在classpath之外获取资源的正确方法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用FileSystemResource。您不需要返回byte[]。 Spring有一个用于生成byte[]本身的转换器。

@RequestMapping(value = "/loadPhoto", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE)
public ResponseEntity<FileSystemResource> loadPhoto() throws IOException {
    FileSystemResource res = new FileSystemResource("/ext/media/photos/photo.png");
    return new ResponseEntity<FileSystemResource>(res, HttpStatus.CREATED);
}