• 边压缩边下载197


    后台代码
    /**
    *
    * @param request
    * @param response
    * @param urls 文件路径 格式 a.jpg,b.jpg...
    */
    @ResponseBody
    @RequestMapping(value = "downloadFilesZip", method = RequestMethod.POST)
    public void downloadFilesZip(HttpServletRequest request, HttpServletResponse response, String urls){
    String[] split = null;
    if(com.ds.platform.core.util.StringUtils.isNotNull(urls)){
    split = urls.split(",");
    }else{
    return;
    }

    //响应头的设置
    response.reset();
    response.setCharacterEncoding("utf-8");
    response.setContentType("multipart/form-data");

    //设置压缩包的名字
    //解决不同浏览器压缩包名字含有中文时乱码的问题
    String downloadName = System.currentTimeMillis()+".zip";
    String agent = request.getHeader("USER-AGENT");
    try {
    if (agent.contains("MSIE")||agent.contains("Trident")) {
    downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
    } else {
    downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    response.setHeader("Content-Disposition", "attachment;fileName="" + downloadName + """);

    //设置压缩流:直接写入response,实现边压缩边下载
    ZipOutputStream zipos = null;
    try {
    zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
    zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法
    } catch (Exception e) {
    e.printStackTrace();
    }

    //循环将文件写入压缩流
    DataOutputStream os = null;
    for(int i = 0; i < split.length; i++ ){
    String url = split[i];
    // editorImagePath真实路径(从配置文件读取)
    File file = new File(editorImagePath+url);
    try {
    //添加ZipEntry,并ZipEntry中写入文件流
    //这里,加上i是防止要下载的文件有重名的导致下载失败
    zipos.putNextEntry(new ZipEntry(i + url.substring(url.lastIndexOf("/")+1)));
    os = new DataOutputStream(zipos);
    InputStream is = new FileInputStream(file);
    byte[] b = new byte[100];
    int length = 0;
    while((length = is.read(b))!= -1){
    os.write(b, 0, length);
    }
    is.close();
    zipos.closeEntry();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    //关闭流
    try {
    os.flush();
    os.close();
    zipos.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }



    模拟表单提交
    function openDownload () {
    let url ='/api/cms/article/downloadFilesZip'

    let form = $('<form></form>').attr('action', url).attr('method', 'post')
      let imgUrl = this.imgList
    const urlFix = '/ueditor/net'
    let urls = ''
    //拼接url路径
    if (imgUrl && imgUrl.length > 0) {
    imgUrl.forEach(item => {
    let url = item.picture_image
    if (url.includes(urlFix)) {
    //截取部分url路径 真实路径要在后台再拼接
    urls += url.substring(url.indexOf('word') + 4) + ','
    }
    })
    form.append($('<input/>').attr('type', 'hidden').attr('name', 'urls').attr('value', urls.substring(0, urls.lastIndexOf(','))))
    form.appendTo('body').submit().remove()
    }
    }
  • 相关阅读:
    第十二章 并发编程
    信息安全系统设计基础实验四:外设驱动程序设计 20145222黄亚奇 20145213祁玮
    Appium学习笔记||四、获取app页面元素
    安装python3.6(附带PyCharm安装)
    Appium学习笔记||三、获取apk的appPackage和appActivity
    Appium学习笔记||二、环境准备
    Appium学习笔记||一、介绍
    Selenium学习笔记||十九、改变窗口大小
    Selenium学习笔记||十八、使用浏览器copy定位元素表达式
    Selenium学习笔记||十七、制造断点,来查看隐藏菜单元素
  • 原文地址:https://www.cnblogs.com/Ai-Hen-Jiao-zhi/p/13503866.html
Copyright © 2020-2023  润新知