欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用spring框架ResponseEntity实现文件下载

程序员文章站 2022-03-03 09:18:35
目录spring框架responseentity实现文件下载后台代码responseentity免压缩多文件下载免压缩批量文件下载spring框架responseentity实现文件下载后台代码@re...

spring框架responseentity实现文件下载

后台代码

@requestmapping("download")
public responseentity<byte[]> downloadpromisepdf() {
  string filename = "企业诚信守法承诺书.pdf";
  try {
    byte[] pdf = **;//byte文件
    string dfilename = new string(filename.getbytes("gb2312"), "iso8859-1");
    httpheaders headers = new httpheaders();
    headers.setcontenttype(mediatype.application_octet_stream);
    headers.setcontentdispositionformdata("attachment", dfilename);
    return new responseentity<>(pdf, headers, httpstatus.ok);
  } catch (buzex e){
    logger.error( e.getmessage());
  }catch (exception e) {
  }
  return null;
}

前端直接window.location.href='/download';

responseentity免压缩多文件下载

免压缩批量文件下载

后台responseentity代码还是一次请求下载一个

前台js改为发出多个请求

js中先用数组储存需要下载的文件参数信息,然后循环数组执行下载方法,下载方法则先ajax判断文件是否存在,是则动态创建a标签批量下载文件

//获得文件数组ids后 循环下载方法
$.each(ids,function(i,value){    	
   	download(filefunctionpatharray[i],filenameinserverarray[i],fileoriginalnamearray[i],ids[i]);
    })
//下载方法
function download(filefunctionpath,filenameinserver,fileoriginalname,ids){
            $.ajax({
            	//检查文件是否存在
                url: "/resourcemanage/resourcedownloaduserlink/checkpermission",
                data: {
                    sysuserid: localstorage.getitem("id"),
                    resourceid: ids
                },
                success: function (data) {//文件存在则创建动态a标签批量下载文件
                    if (data.success) {
                    //responseentity下载文件的url
                    	var url = "../filehandle/download.do?fileplatpath=" 
                        	+ "resource&filefunctionpath=" + filefunctionpath 
                        	+ "&filenameinserver=" + filenameinserver
                        	+ "&fileoriginalname=" + fileoriginalname;
                    	var filename = filenameinserver;
                    	
                    	downloadfile(url,filename);//动态创建a标签 批量下载
                    }
                }
            })
        }
		//动态创建a标签
        const downloadfile = (url, filename = '') => {
  		  let elelink = document.createelement('a');
  		  elelink.download = filename;
  		  elelink.style.display = 'none';
  		  elelink.href = url;
  		  // 受浏览器安全策略的因素,动态创建的元素必须添加到浏览器后才能实施点击
  		  document.body.appendchild(elelink);
  		  // 触发点击  
  		  elelink.click();
  		  // 然后移除
  		  document.body.removechild(elelink);
  		};

点击下载则会 批量同时下载

使用spring框架ResponseEntity实现文件下载

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。