如何加载类路径之外的资源?

mis*_*sco 2 java resources spring

我在 web 应用程序中使用 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);
}
Run Code Online (Sandbox Code Playgroud)

我尝试将 url 映射到 spring 上下文中的真实位置

<mvc:resources mapping="/ext/media/photos/**" location="file:/home/user/ext/media/photos/"/>
Run Code Online (Sandbox Code Playgroud)

但我还是拿不到资源。这是获取类路径之外的资源的正确方法吗?

Sot*_*lis 5

您可以使用一个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);
}
Run Code Online (Sandbox Code Playgroud)