如何为客户提供使用Spring下载文件的可能性?

时间:2016-07-13 08:05:40

标签: spring-mvc

我正在构建一个Web应用程序,某种类型的dropbox,用户可以使用Spring MVC和Hibernate上传任何类型的文件。我有一个类型为“file”的输入用于上传,我在控制器中有一个方法,它通过将多部分文件作为参数来处理上传请求,并将该文件存储在特定用户的数据库中。问题是我不知道如何将文件交还给客户端。从数据库中检索文件后,如何返回它以及我应该在前端有什么内容才能使窗口显示并请求下载路径?或者告诉我在哪里可以读到这个。

谢谢

1 个答案:

答案 0 :(得分:0)

你可以创建这样的东西:

@RequestMapping(value = "/yourURL/download", method = RequestMethod.GET)
public void download(HttpServletResponse response) {
    ...Find your file to download
    File file = //retrieve your file
    String mimeType = URLConnection.guessContentTypeFromName(file.getName());
    if (mimeType == null) {
        logger.debug("mimetype is not detectable, will take default");
        mimeType = "application/octet-stream";
    }

    try {
        response.setContentType(mimeType);
        response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName()));
        response.setContentLength((int) file.length());
        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        FileCopyUtils.copy(inputStream, response.getOutputStream());
    } catch (Exception ex) {
        logger.error("An exception has occurred trying to download the file", ex);
    }
}
  1. 创建一个URL以标识希望用户下载哪个文档,可能需要添加一些参数或路径变量
  2. 从数据库中查找文件并构建File对象并确定mimeType
  3. 添加到响应文件,并根据浏览器用户正在使用该文件将自动下载或要求下载它
  4. 在JSP / HTML文件中,您只需要使用此URL的href创建一个按钮/链接。