如何显示用户上传的文件?
我在本地硬盘上有一些上传的文件,但我似乎无法显示它们:
<img src="appcontext/uploads/file.jpg" />
。
当我尝试从浏览器中查看此内容时,我得到file not found - error 404
。我想知道这个问题是不是因为我正在构建一个REST应用程序。我可以在servlet-context.xml
中将单词映射到位置吗?
<resorces mapping="/uploads/**" location="D:/uploads/" />
或类似的东西?
答案 0 :(得分:2)
一种方法是拥有一个控制器,它将文件名作为参数。然后这个控制器返回文件(而不是像其他大多数一样渲染的jsp)。
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity<byte[]> thumbnail(@RequestParam(value = "name") String name ) {
File file = new File(BASEPATH + "/" + name);
if (file.exists)) {
byte[] content = org.apache.commons.io.FileUtils.readFileToByteArray(file);
HttpHeaders headers = new HttpHeaders();
headers.setContentType("yourcontentType");
headers.setContentLength(thumbnailContent.length);
return new ResponseEntity<byte[]>(content, headers, HttpStatus.OK);
} else {
return new ResponseEntity<byte[]>(HttpStatus.NOT_FOUND);
}
}
注意:这个简单的示例是一个强大的安全问题,用户可以使用它来从tomcat具有读访问权限的服务器下载每个文件。不仅限于BASEPATH。 (攻击者可以发送例如:name =“.... \ differentDir \ secret.txt”) - 一种处理方法是使用alloed chars的白名单(只有A..Z,a..z, 0..9)