如何加载类路径之外的资源?
How to load resources outside of classpath?
我在网络应用程序中使用 spring 框架,我想加载存储在类路径之外的资源 (*.jpeg)。
我正在调用某个控制器的 GET
方法。当我从类路径调用照片时它起作用了。但是当我调用如下路径时:
/ext/media/photos/photo.png
、file:/ext/media/photos/photo.png
、/home/user/ext/media/photos/photo.png
、http://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);
}
我试图将 url 映射到 spring 上下文中的真实位置
<mvc:resources mapping="/ext/media/photos/**" location="file:/home/user/ext/media/photos/"/>
但是还是获取不到资源。这是如何在类路径之外获取资源的正确方法吗?
您可以使用 FileSystemResource
。您不需要 return 一个 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);
}
我在网络应用程序中使用 spring 框架,我想加载存储在类路径之外的资源 (*.jpeg)。
我正在调用某个控制器的 GET
方法。当我从类路径调用照片时它起作用了。但是当我调用如下路径时:
/ext/media/photos/photo.png
、file:/ext/media/photos/photo.png
、/home/user/ext/media/photos/photo.png
、http://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);
}
我试图将 url 映射到 spring 上下文中的真实位置
<mvc:resources mapping="/ext/media/photos/**" location="file:/home/user/ext/media/photos/"/>
但是还是获取不到资源。这是如何在类路径之外获取资源的正确方法吗?
您可以使用 FileSystemResource
。您不需要 return 一个 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);
}