JAVAWEB 文件下载

 

使用:javaweb环境下的文件下载

  前端页面代码:



jquery代码(data是发ajax请求,从后台获得的数据)
$('#view_filePath').html(data.filePath);
$('#view_filePath').attr('href','/ctl-web/file/downFile?filePath='+data.filePath);

后台代码:

@Controller
@RequestMapping(value = "/file")
public class CtlFileController {
    @RequestMapping(value = "/downFile",params = "filePath"
    )
    public void downloadFile(@RequestParam(value="filePath",required = true)  String filePath, HttpServletResponse response) {
        File downFile = new File(filePath);
        response.setContentType("multipart/form-data");
        InputStream ins = null;
        response.setHeader("Content-Disposition", "attachment;filename=" + downFile.getName());
        try {
            ins = new FileInputStream(downFile);
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[1024];
            int len;
            while ((len = ins.read(b)) > 0) {
                os.write(b, 0, len);
            }
            os.flush();
            os.close();
            ins.close();
        } catch (FileNotFoundException ffe) {
            ffe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}
按照如上方法即可。

之前测试的时候在本地用浏览器直接访问controller可以下载,但是采用$.get('/ctl-web/file/downFile',{'filePath':data.filePath},function(){})的方式不能下载,这是因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,js无法调用到浏览器的下载处理机制和程序。
--------------------- 
作者:fan510988896 
来源:CSDN 
原文:https://blog.csdn.net/fan510988896/article/details/71520390 
版权声明:本文为博主原创文章,转载请附上博文链接!另外在测试后台的时候发现如果写成restful风格的接口,发现就不可以。

代码如下:

package com.pay.ctl.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
@Controller
@RequestMapping(value = "/file")
public class CtlFileController {
    @RequestMapping(value = "/{filePath}/downFile",params = "filePath"
    )
    public void downloadFile(@PathVarible("filePath")  String filePath, HttpServletResponse response) {
        File downFile = new File(filePath);
        /* 设置文件ContentType类型,这样设置,会自动判断下载文件类型 */
        response.setContentType("multipart/form-data");
        /* 设置文件头:最后一个参数是设置下载文件名 */
        InputStream ins = null;
        response.setHeader("Content-Disposition", "attachment;filename=" + downFile.getName());
        try {
            ins = new FileInputStream(downFile);
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[1024];
            int len;
            while ((len = ins.read(b)) > 0) {
                os.write(b, 0, len);
            }
            os.flush();
            os.close();
            ins.close();
        } catch (FileNotFoundException ffe) {
            ffe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

 

  

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