java实现文件下载

根据项目需求实现word文档下载功能,这是java的后台实现,前台调用采用ajax方式,参数是文件名

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.ResponseBody;

@Controller
@RequestMapping("laws")
public class LawsRest {
    private static Logger logger = LoggerFactory.getLogger(LawsRest.class);

    @RequestMapping(value = "/downloadFile/{value}",method=RequestMethod.GET)
    @ResponseBody
    public void downloadFile(@PathVariable("value") String value, HttpServletRequest request,
            HttpServletResponse response) throws IOException {

        String directory = request.getSession().getServletContext().getRealPath("/");
        String fileName = value+".doc";
        String filePath = directory + "laws\\" + fileName;

        //设置向浏览器端传送的文件格式
        //判断文件是否存在
        File file=new File(filePath);
        if(!file.exists()){
            fileName = value+".docx";
            filePath = directory + "laws\\" + fileName;
        }
        logger.info(value);
        logger.info(filePath);
        response.setContentType("application/msword");  
        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        FileInputStream in = new FileInputStream(filePath);
        // 创建输出流
        OutputStream out = response.getOutputStream();
        // 创建缓冲区
        byte buffer[] = new byte[1024];
        int len = 0;
        // 循环将输入流中的内容读取到缓冲区当中
        while ((len = in.read(buffer)) > 0) {
            // 输出缓冲区的内容到浏览器,实现文件下载
            out.write(buffer, 0, len);
        }
        out.flush();

        in.close();
        out.close();
    }
}
文章目录