如何显示用户上传的文件?

时间:2012-01-09 20:42:56

标签: spring jsp

如何显示用户上传的文件?

我在本地硬盘上有一些上传的文件,但我似乎无法显示它们:  <img src="appcontext/uploads/file.jpg" />

当我尝试从浏览器中查看此内容时,我得到file not found - error 404。我想知道这个问题是不是因为我正在构建一个REST应用程序。我可以在servlet-context.xml中将单词映射到位置吗?

<resorces mapping="/uploads/**" location="D:/uploads/" />

或类似的东西?

1 个答案:

答案 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)