• util


    package cn.itcast.util;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;

    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;

    public class DownloadUtil {

    /**
    * @param filePath 要下载的文件路径
    * @param returnName 返回的文件名
    * @param response HttpServletResponse
    * @param delFlag 是否删除文件
    */
    protected void download(String filePath,String returnName,HttpServletResponse response,boolean delFlag){
    this.prototypeDownload(new File(filePath), returnName, response, delFlag);
    }


    /**
    * @param file 要下载的文件
    * @param returnName 返回的文件名
    * @param response HttpServletResponse
    * @param delFlag 是否删除文件
    */
    protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){
    this.prototypeDownload(file, returnName, response, delFlag);
    }

    /**
    * @param file 要下载的文件
    * @param returnName 返回的文件名
    * @param response HttpServletResponse
    * @param delFlag 是否删除文件
    */
    public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){
    // 下载文件
    FileInputStream inputStream = null;
    ServletOutputStream outputStream = null;
    try {
    if(!file.exists()) return;
    response.reset();
    //设置响应类型 PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。
    response.setContentType("application/octet-stream;charset=utf-8");

    //设置响应的文件名称,并转换成中文编码
    //returnName = URLEncoder.encode(returnName,"UTF-8");
    returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码

    //attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果
    response.addHeader("Content-Disposition", "attachment;filename="+returnName);

    //将文件读入响应流
    inputStream = new FileInputStream(file);
    outputStream = response.getOutputStream();
    int length = 1024;
    int readLength=0;
    byte buf[] = new byte[1024];
    readLength = inputStream.read(buf, 0, length);
    while (readLength != -1) {
    outputStream.write(buf, 0, readLength);
    readLength = inputStream.read(buf, 0, length);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    outputStream.flush();
    } catch (IOException e) {
    e.printStackTrace();
    }
    try {
    outputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    try {
    inputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    //删除原文件

    if(delFlag) {
    file.delete();
    }
    }
    }

    /**
    * by tony 2013-10-17
    * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream
    * @param response HttpServletResponse 写入response
    * @param returnName 返回的文件名
    */
    public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{
    response.setContentType("application/octet-stream;charset=utf-8");
    returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码
    response.addHeader("Content-Disposition", "attachment;filename=" + returnName);
    response.setContentLength(byteArrayOutputStream.size());

    ServletOutputStream outputstream = response.getOutputStream(); //取得输出流
    byteArrayOutputStream.writeTo(outputstream); //写到输出流
    byteArrayOutputStream.close(); //关闭
    outputstream.flush(); //刷数据
    }
    }

  • 相关阅读:
    视频流媒体服务器播放视频或直播为什么要使用编解码?
    安防视频监控直播的画面都是如何采集的?
    为什么说线上教育是未来的趋势?
    音视频流媒体服务器发展到现在有哪些难题?应该怎么解决?
    视频流媒体服务器如何将视频直播转推到其他平台?
    为什么流媒体服务器做安防视频直播或者娱乐直播服务?
    安防音视频流媒体服务器EasyDSS之编解码的基本原理及压缩编码的方法介绍
    区块链保护隐私,我们真的需要吗?
    你可能还是低估了云计算的力量......
    区块链究竟有什么价值体现?
  • 原文地址:https://www.cnblogs.com/songyunxinQQ529616136/p/6551497.html
Copyright © 2020-2023  润新知