美文网首页
关于文件下载

关于文件下载

作者: 殇别云之 | 来源:发表于2016-01-05 14:30 被阅读0次

引言

由于项目需要,需要实现对特定Excel模板数据的导入操作,而模板需要由开发人员设计,而模板需要对各种数据做校验,取特定值等限制,所以下载模板的方式就使用了文件下载的方式来实现。

实现

项目使用 JFinal搭建,在JSP客户端使用 js直接跳转的方式请求服务链接

window.location.href=$("#basePath").val() + "/mission/template/download/" + $("#templateType").val();

而在后台,我们将制作好的模板放置到 src/main/resources目录下


Paste_Image.png

接下来只需要将文件转换为workbook。

String completeFilePath = MissionController.class.getClassLoader().getResource("/").getPath() + Constants.DEFAULT_TEMPLATE_FOLDER + fileName;
Workbook workbook = WorkbookFactory.create(new File(completeFilePath));

JFinal支持可按照自己的render方式来渲染请求结果,针对excel文件下载,我们继承了Render类,并重写 render方法

@Override
    public void render() {
        OutputStream os = null;
        try {
            response.reset();
            final String userAgent = request.getHeader("USER-AGENT");
            if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent, "Trident")){//IE浏览器
                fileName = URLEncoder.encode(fileName,"UTF8");
            }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");
            }else{
                fileName = URLEncoder.encode(fileName,"UTF8");//其他浏览器
            }
            response.setHeader("Content-disposition", "attachment; filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=utf-8;");
            os = response.getOutputStream();
            workbook.write(os);
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if(os != null){
                    os.flush();
                    os.close();                     
                }
            } catch (IOException e) {
                throw new RenderException(e);
            }
        }
    }

这个方法主要说明一点:这里为兼容各种浏览器的下载(若未对fileName做处理,IE下会出现中文名称乱码问题),对各种浏览器下我们对fileName进行编码处理。而下载方式主要取得response的输出流,并将workbook写入到输出流即可。
最后,在Controller层的最后,渲染render实体对象即可

相关文章

  • 关于文件下载

    使用xcode自带的代理方法。 1.使用NSUrlContionDownloadDelegate. 1)内存不会暴...

  • 关于文件下载

    引言 由于项目需要,需要实现对特定Excel模板数据的导入操作,而模板需要由开发人员设计,而模板需要对各种数据做校...

  • 关于文件下载

    implementation'com.qianwen:okhttp-utils:3.8.0' implementa...

  • 【关于下载文件】

    一个链接 ,放浏览器中会下载一个文件出来。 处理方式有2类 1 前端处理成文件 2 后端处理成文件 1 前端处理成...

  • Moved Permanently

    关于下载文件中包含重定向问题的解决方案。之前下载文件没问题,但是今天遇到一个下载文件里包含重定向,还是用之前的下载...

  • 关于前端进行文件下载

    最近在做关于适用js进行文件上传下载的功能,在下载部分遇到了一些问题,特此记录下来。 首先关于文件下载在后端我能想...

  • 关于servlet下载单文件

    从事IT行业,已经很长一段时间了。很多东西还处于初级阶段。比如,简单的servlet下载,自己还是无法理解。以前,...

  • 关于文件下载的总结

    最近使用java 语言 ,实现了一下针对文件下载的功能。 使用JDK 有很多类,能够实现该功能,如 1 FileI...

  • 关于文件上传和下载

    1.用servlet来做 这个你要写的servlet是要extends httpservlet,在doGet 与d...

  • 超详细已解决|关于python怎么下载|如何下载python文件

    超详细|关于python怎么下载|如何下载python文件教程|python下载安装的教程 很多朋友开始学习Pyt...

网友评论

      本文标题:关于文件下载

      本文链接:https://www.haomeiwen.com/subject/gelzhttx.html