【发布时间】:2018-06-07 15:32:21
【问题描述】:
我正在使用 Spring Boot 开发一个 Web 应用程序。在应用程序中,我上传文件并在该文件绝对路径保存在数据库中后复制到本地文件夹。所以我有文件,我知道它在哪里,但我无法在 localhost 中找到它。我知道在 spring 中有一个静态文件夹用于存放静态文件,但我不想复制文件,因为我将在其他应用程序中使用这些数据。
例如:
本地文件位置:/Users/user/data/image.png
我想这样联系:http://localhost:8080/data/image.png
编辑:我找到了解决方案。我为此使用了MvcUriComponentsBuilder。
String url = MvcUriComponentsBuilder.fromMethodName(FileController.class,"serveFile",resource.getFilename()).build().toString();
它是控制器方法的正确返回值。
方法:
@GetMapping("/files/{filename:.+}")
@ResponseBody
public ResponseEntity<Resource> serveFile(@PathVariable String filename) {
Resource file = storageService.loadAsResource(filename);
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + file.getFilename() + "\"").body(file);
}
【问题讨论】:
-
您可以创建一个从实际位置读取文件的控制器,但通过
@RequestMapping映射它,正如您在localhost:8080表单中描述的那样 -
使用类路径从数据文件夹中获取文件并移动到您的绝对路径。
标签: java spring spring-boot localhost