精华内容
下载资源
问答
  • ZIP工具类:@Slf4jpublic classZipUtils {/*** 将多个流转成zip文件输出*@paramlistStream 文件流实体类对象*@paramfileName zip包的名称*@paramresponse*@return*/public static boolean listStreamToZipStream...

    ZIP工具类:

    @Slf4jpublic classZipUtils {/*** 将多个流转成zip文件输出

    *@paramlistStream 文件流实体类对象

    *@paramfileName zip包的名称

    *@paramresponse

    *@return

    */

    public static boolean listStreamToZipStream(ListlistStream, String fileName, HttpServletResponse response) {boolean flag = false;

    BufferedInputStream bis= null;

    FileOutputStream fos= null;

    ZipOutputStream zos= null;

    OutputStream out= null;try{

    out=response.getOutputStream();

    response.reset();

    response.setHeader("Content-Disposition","attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO-8859-1"));

    response.setHeader("Access-Control-Allow-Origin","*");

    response.setContentType("application/octet-stream; charset=utf-8");

    response.setCharacterEncoding("UTF-8");

    zos= newZipOutputStream(out);byte[] bufs = new byte[1024 * 10];for(ZipDto zipDto : listStream) {

    String streamfilename=zipDto.getName();//创建ZIP实体,并添加进压缩包

    ZipEntry zipEntry = newZipEntry(streamfilename);

    zos.putNextEntry(zipEntry);//读取待压缩的文件并写进压缩包里

    bis = new BufferedInputStream(zipDto.getInputstream(), 1024 * 10);int read = 0;while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {

    zos.write(bufs,0, read);

    }

    }

    flag= true;

    zos.close();

    }catch(FileNotFoundException e) {

    e.printStackTrace();throw newRuntimeException(e);

    }catch(IOException e) {

    e.printStackTrace();throw newRuntimeException(e);

    }finally{//关闭流

    try{if (null !=bis){

    bis.close();

    }if (null !=zos){

    zos.close();

    }if (null !=out){

    out.close();

    }

    }catch(IOException e) {//e.printStackTrace();

    log.error(e.getMessage());

    }

    }returnflag;

    }

    }

    ZIP DTO实体类:

    @Datapublic classZipDto {publicString name;publicInputStream inputstream;publicZipDto(String name, InputStream inputstream) {this.name =name;this.inputstream =inputstream;

    }

    }

    ZIP 方法层:

    public Boolean exportFile(List fileNames, HttpServletResponse response, HttpServletRequest request) {

    QueryWrapper queryWrapper = new QueryWrapper();

    queryWrapper.in("file_name",fileNames);

    List cmtDealerSpotplanManagements = list(queryWrapper);

    // 将数据处理

    List spotPlanNames = cmtDealerSpotplanManagements.stream().map(查询数据::getFilePath).collect(Collectors.toList());

    List list = new ArrayList<>();

    // 数据为空则返回

    if ( CollectionUtils.isEmpty(spotPlanNames) ){

    return false;

    }

    // 将数据地址去远程下载

    for (String fileUrl : spotPlanNames){

    File tempFile = new File(fileUrl);

    String newFileUrl = fileUrl.replace(" ", "%20");

    InputStream fileInputStream = fileService.download2(newFileUrl);

    String tempFileName = tempFile.getName();

    list.add(new ZipDto(tempFileName, fileInputStream));

    }

    String fileName = "test" + ".zip";

    ZipUtils.listStreamToZipStream(list, fileName, response);

    return true;

    }

    展开全文
  • charset=UTF-8', 'Equipment2021/11/12.xlsx') }) 注意responseType: 'blob'是重点 downloadnew(res, type, filename) {//返回文件流,格式,保存的文件名字 // 创建blob对象,解析流数据 const blob = new Blob(...

    点击按钮调接口

          this.$axios.post(
            defaultSettings.filePath + '/api/equipmentappservicecs/exporteqtequipmentexcel', {},
            {
              headers: { "Content-Type": "application/json; charset=utf-8", "Authorization": window.sessionStorage.getItem("token") },
              responseType: 'blob'
            }).then(ok => {
              this.downloadnew(ok.data, 'application/vnd.ms-excel;charset=UTF-8', 'Equipment2021/11/12.xlsx')
            })

    注意responseType: 'blob'是重点

         downloadnew(res, type, filename) {//返回的文件流,格式,保存的文件名字
          // 创建blob对象,解析流数据
          const blob = new Blob([res], {
            // 设置返回的文件类型
            // type: 'application/pdf;charset=UTF-8' 表示下载文档为pdf,如果是word则设置为msword,excel为excel
            type: type
          })
          // 这里就是创建一个a标签,等下用来模拟点击事件
          const a = document.createElement('a')
          // 兼容webkix浏览器,处理webkit浏览器中href自动添加blob前缀,默认在浏览器打开而不是下载
          const URL = window.URL || window.webkitURL
          // 根据解析后的blob对象创建URL 对象
          const herf = URL.createObjectURL(blob)
          // 下载链接
          a.href = herf
          // 下载文件名,如果后端没有返回,可以自己写a.download = '文件.pdf'
          a.download = filename
          document.body.appendChild(a)
          // 点击a标签,进行下载 
          a.click()
          // 收尾工作,在内存中移除URL 对象
          document.body.removeChild(a)
          window.URL.revokeObjectURL(herf)
        },

    展开全文
  • 在Web前端开发中,如何用Javascript获取文件后缀呢?我们一起来了解下。在上传文件时,常常要对文件的类型即对文件的后缀进行判断,用javascript可以很容易的做到这一点。用Javascript解析一个带绝对路径的...

    在Web前端开发中,如何用Javascript获取文件后缀名呢?我们一起来了解下。

    在上传文件时,常常要对文件的类型即对文件的后缀名进行判断,用javascript可以很容易的做到这一点。用Javascript解析一个带绝对路径的文件名并得到后缀名的方法有很多种,这里列出一种,以供参考。

    对于一个带绝对路径的文件名如:D:\Program Files\Notepad++\Notepad++.exe

    首先为了避免转义反斜杠出问题,可以用正则表达式来将\或\\替换成#,如:

    D:#Program Files#Notepad++#Notepad++.exe

    之后以‘#'为分隔符,将字符串分解成数组,得到如下数组:

    D:  ProgramFiles  Notepad++  Notepad++.exe

    取数组的最后一个即为带后缀的文件名:Notepad++.exe

    再以‘.'为分隔符,将这个带后缀的文件名分解成数组,得到如下数组:

    Notepad++  exe

    然后再取数组的最后一个就可以得到文件的后缀名exe了

    代码如下(Win7+IE9测试通过)://by MoreWindows (http://blog.csdn.net/MoreWindows)

    function GetExtensionFileName(pathfilename)

    {

    var reg = /(\\+)/g;

    var pfn = pathfilename.replace(reg, "#");

    var arrpfn = pfn.split("#");

    var fn = arrpfn[arrpfn.length - 1];

    var arrfn = fn.split(".");

    return arrfn[arrfn.length - 1];

    }

    DEMO代码:function Test()

    {

    var filePath="D:\\Program Files\\Notepad++\\Notepad++.exe";

    alert(GetExtensionFileName(filePath));

    }

    点击Test按钮就可以弹出内容为exe的对话框,表示GetExtensionFileName能正确解析带绝对路径的文件名并得到后缀名。

    估计这种方法只能在Windows平台下使用吧,在Linux执行下不知道会如何?

    展开全文
  • 后端代码响应头部需要设置Access-Control-Expose-Headers头部信息,把你需要获取的头部属性字段设置在这个值里面前端响应部分就可以获取,否则不可无法获取(多个用逗号分割),如下设置前端可以获取文件名字, ...

    需求:点击导出按钮,将列表数据下载成本地Excel文件

    在这里插入图片描述

    实现:

    后端部分代码:

    后端代码响应头部需要设置Access-Control-Expose-Headers头部信息,把你需要获取的头部属性字段设置在这个值里面前端响应部分就可以获取,否则不可无法获取(多个用逗号分割),如下设置前端可以获取文件名字,

    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(message, "UTF-8"));
    response.setContentType("application/octet-stream");
    response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
    

    前端:

    axios 请求头部一定要加上responseType=‘blob’

    axios({
        url:'请求地址',
        method: 'post',
        responseType:'blob', // 后台响应数据类型
        data: data
      })
    

    如果不加的话,你就会看到个这么个玩意(文件流),打印出的结果也是这样的……
    在这里插入图片描述
    然而,我们需要的正常格式是这样子
    在这里插入图片描述
    data使我们需要的数据,size代表文件大小,0的话则为空内容
    type是文件类型
    headers是配置项,我们可从中取出后端添加的文件名

    拿到文件对象了,下一步干嘛(当然是下载下来啊!)

    // 请求成功后下载文件
       if (res != null && res.status == 200) {
          // 生成blob对象 定义下载格式
          let blob = new Blob([res.data], { type: res.type });
          // 获取文件名
          let filename = res.headers['content-disposition'];
          filename = decodeURIComponent(filename.split("filename=")[1]);
          // 创建 a标签 执行下载
          let downloadElement = document.createElement('a');
          let href = window.URL.createObjectURL(blob); //创建下载的链接
          downloadElement.href = href;
          downloadElement.download = filename; //下载后文件名
          document.body.appendChild(downloadElement); // 项目插入a元素
          downloadElement.click(); //点击下载
          document.body.removeChild(downloadElement); //下载完成移除元素
          window.URL.revokeObjectURL(href); //释放blob对象
    

    beautiful,点个赞吧!

    展开全文
  • 1.前端代码-HTML支持扩展...前端代码-JS/*选择文件*/getFile:function(event){var file = event.target.files;for(var i = 0;i//上传类型判断var imgName = file[i].name;var idx = imgName.lastIndexOf(".");if (id...
  • JQuery的ajax方法并不支持返回流的方式,因此如果要想将文件流对象返回前端,要使用原生Ajax new XMLHttpRequest() 的方式
  • Python3 from urllib.parse import quote ... response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(filename)) Python2 from urllib import quote ... # 向下兼容 Python2.6 以前的...
  • 1.需要生命axios的responseType: 'blob'格式 (设置相应数据的类型,设置后后台返回的数据会被强制转为blob类型;如果后台返回代表失败的data,前端也无法得知,依然会下载得到名为undefined的文件。) ...
  • 前端实现一个上传功能,上传大于10M的文件时发现返回报 413 request Entity too Large错误。 经过排查,发现服务器使用nginx作为反向代理服务器,报上错误,是因为请求长度超过了nginx默认的缓存大小和最大客户端...
  • Magnifier笔记 SQL Server 用SQL语句... linux系统如何发送邮件 安装应用yum install mailx sendmail -y接着修改/etc/mail.rc文件,添加一下参数#末尾添加 zabbix 发送告警信息邮箱(按照自己的情况修改)set from= ...
  • 使用原生ajax导出后端返回文件前端用blob处理后端返回的二进制数据流,导出Excel格式的文件。 const infoExport = () => { 后端真实的路径是:"/call/api/orderName/export" 以下url中第一个api是 proxy 需要...
  • 这段代码的效果是 将获得图片生成一个url链接然后存在url(我自己定义的)变量里面,然后给img的src绑定这个url 同理,我在使用axios获得后端给的文件流的时候也会出现文件损坏的问题,首先我们要排除因为后缀写...
  • Java后端发送文件前端下载
  • 文章目录文件下载利用a链接下载文件如果项目需要通过header鉴权,要设置header什么的Blob对象FileReader文件上传利用input标签 设置 type="file" 文件下载 利用a链接下载文件 let aLink = document.createElement('a'...
  • 前端导出excel表格, 前端导出下载文件, 用new Blob()导出文件, 前端导出文件乱码解决
  • 最近有个项目有数据导出的功能,文件格式xls,文件名是中文,结果下载时返回的文件名乱码,最终解决方案如下。 1、接口代码 @PassToken @ApiOperation("导出报表") @ApiImplicitParam( name = "typeId", ...
  • 前端文件下载我相信很多小伙伴并不陌生,下载文件的形式也有很多,例如,后端返回一个文件地址,我们把地址放在<a></a>标签里面点击下载;或者是通过后端接口返回文件流,我们再对流进行一系列的操作...
  • 原标题:JS - 获取文件后缀,判断文件类型(比如是否图片格式)1,获取文件后缀有时候我们需要通过文件名或者路径,得到该文件的后缀(扩展),可以通过如下方式进行截取://文件路径var filePath = "file:///...
  • 请求如下 axios({ url: '接口地址', method: 'get', //当前请求的请求方式 ...```后台直接返回文件流 var res = 上面请求返回文件流 /////接下来是处理文件流并下载逻辑 ```javascript let blob = new Blob([re
  • 因为是文件流下载,所以在取后台数据的时候,要多传递一个【responseType: ‘blob’】这个参数后端返回文件流: 代码如下:reportTable(val) {this.$axios.service({method: "post",url: '/test/downloadZip',data...
  • 前端在线预览PDF文件

    2021-10-10 16:58:15
    如何在vue项目中预览PDF格式的文件 需求:在vue3.x项目中预览pdf文件 提供以下三种方案: 1.Vue-pdf:适用于vue2.x版本,vue3.x需要改一些源码(vue2.x项目极力推荐,vue3.x需要斟酌) 2.Pdf.js:该插件推荐通过其中...
  • GIN文件上传与返回

    2021-08-09 20:11:50
    上传文件 ...此时在postman中的请求参数体,Body中新建一个key,名为file(可以任意一个key),然后将其文件格式设置为File,这时使用的文件格式,换成字符串Text也是允许的。 如果选择的是Text,在后面
  • r语言数据可视化实战米霖单工具包114元包邮(需用券)去购买...本文要解决的场景如下:前端multipartfile 上传文件,后端接收后构造post请求,调用外部接口,传送文件流及其他参数内容包括:1.前端postman调用上传接口...
  • 前端选择本地excel,读取第一列数据拼接字符串返回前端
  • 文章目录前端将数据返回给后端,出现路径绝对路径,没有项目的情况当点击前端的form表单的提交时,出现只有主机地址加前端数据,而没有项目时的情况,如图所示解决问题,将图中的/去掉,就会变成相对路径 前端...
  • 一、正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性,由于a.download跨域会失效,上面代码只可同域实现 二、通过blob可以实现跨域下载并修改文件名 downloadFile(item) {//点击方法 var ...
  • YDOOK:Java: 读取文件,将内容以字符串形式返回 © YDOOK JY Lin 文章目录YDOOK:Java: 读取文件,将内容以字符串形式返回© YDOOK JY Lin1. 实例代码: 1. 实例代码: // 读取文件返回字符串 public static ...
  • 前端(react)使用minio上传文件

    千次阅读 2020-12-30 06:52:28
    将上传代码封装成工具类// 上传文件需要的配置const Minio = require('minio');const stream = require('stream');// 你的minio配置信息const minioClient = new Minio.Client(window.minioConfig);// base64转...
  • 最近实现前端文件流下载,走了好多弯路,坑坑洼洼的 好在爬出来了。 提到文件流下载 就有get和post两种,其中get很简单。直接调取接口, 然后window.open打开全路径即可实现下载。 const action = `/api/user-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,156
精华内容 62,062
关键字:

文件名为中文返回前端