JAVA项目文件下载、浏览接口

JAVA项目文件下载、浏览接口

  关于文件上传参照我以前写的这个java项目文件上传文章
  如果要接口的写法的话,可以下载这个文件上传下载例子下载地址

  本篇文章只说文件下载部分

 /**
     * 文件下载接口
     * @param filePath  文件上传时,返回的相对路径
     * @param response
     * @param isOnLine  传入true,表示打开,但是打开的是浏览器能识别的文件,比如图片、pdf,word等无法打开
     *                  传入false,只是下载,如果不传入这个参数默认为false
     * @throws Exception
     */
    @RequestMapping(value = "/downloadFile",method = RequestMethod.GET)
    public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {
        File f = new File(realPath+filePath);
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }
        String fileName = f.getName();
        fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");

        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[1024];
        int len = 0;
        response.reset(); // 非常重要
        if (isOnLine) { // 在线打开方式
            URL u = new URL("file:///" + realPath+filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + fileName);
            // 文件名应该编码成UTF-8
        } else { // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
    }

  上边这个接口是一个文件下载的接口,主要有以下几个注意的:

  • filePath 参数,是在文件上传后,后台应该给你返回一个相对路径,比如/upload/2018-08-03/test.jpg 这样的字符串,接着你在调用这个图片下载接口时,可以直接传回来即可。
  • isOnLine 参数,这个其实为了方便前端对于下载的文件,是预览,还是下载 ,提供了两种选择,请注意,文件预览,必须是可预览的文件,比如docxls 这种是浏览器无法预览的。传入true ,则会打开,传入false或者不传入这个参数,则只会下载。

      关于这个预览下载 多说几句,就是对于我们http 请求来说,文件的预览下载 ,其实对应于请求 中,是一个请求头设置 的问题,当然前提是这个文件可以被浏览器识别打开:

 response.setHeader("Content-Disposition", "inline; filename=" + fileName);
 response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

  如果是下载,那么上边为attachment
  如果是预览,那么上边为inline
  对于前端来说,其实图片的预览不需要关注这个,因为图片对于 等那种可以访问路径资源的标签,即使你设置的是下载 ,它也能自动打开,但是对于pdf ,貌似必须要在上边接口里,设置成预览 ,才能把它打开。

你可能感兴趣的:(java,java文件下载预览)