java如何从linux服务器下载文件

 更新时间:2022年01月28日 14:11:03   作者:Summer_DM  
这篇文章主要介绍了java如何从linux服务器下载文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

最近做项目,使用的技术较老,前端用的架构是jsp,主要技术是jquery、js、css、html等,后端用到的主要是springmvc、存储过程等。

下面是一个文件下载的简单实现。主要是客户在浏览器点击一个pdf文件,进行下载。改文件存在于公司的服务器上。

一、前端代码

1、html代码

 <div class="border-gb-title">项目文件</div>
    <div class="grey-card jus-c ptb30 flex">
        <div class="tc mlr50 cupointer" onclick="getProjectFiles(1)"><img src="/res/images/file.png">
            <div class="mt5 fs16">合同</div>
        </div>
        <div class="tc mlr50 cupointer" onclick="getProjectFiles(2)"><img src="/res/images/file.png">
            <div class="mt5 fs16">计划说明书</div>
        </div>
        <div class="tc mlr50 cupointer" onclick="getProjectFiles(3)"><img src="/res/images/file.png">
            <div class="mt5 fs16">风险说明书</div>
        </div>
        <div class="tc mlr50 cupointer" onclick="getProjectFiles(6)"><img src="/res/images/file.png">
            <div class="mt5 fs16">服务协议</div>
        </div>
    </div>

2、js代码

 //获取文件,主要是从数据库获取到:文件名、文件路径
    function getProjectFiles(type) {
        var fileParam = {
            pageNo: 1,
            pageSize: 10,
            xmId: ${detail[0]["项目ID"]},
            cxlx: type,
        };
        $.ajax({
            url: "/prod/getProjectFiles",
            type: "POST",
            data: fileParam,
            dataType: "JSON",
            success: function (ret) {
                if (ret && ret['code'] > 0) {
                    debugger
                    //渲染界面
                    var dataList = ret['list'];
                    download(dataList[0]["附件名"],dataList[0]["附件路径"]);
                }
            }
        })
    }
//下载文件,调用后端接口
    function download(fileName,filePath){
        window.open("/downloadTwo?fileName="+encodeURI(fileName)+"&downUrl="+filePath);
        return ;
    }

3、css样式

前端的所有样式都是使用layui架构的。

二、后台代码

1、获取文件

主要是,调用存储过程,去数据库获取文件名和文件路径,后面用于下载。

 /**
     * 获取项目文件
     *   I_CXLX       IN NUMBER, --查询类型 1|信托合同 2|信托计划说明书3|认购风险说明书 5|隐私协议|6用户服务协议
     *   I_XSXM      IN NUMBER --发行方案id
     * @param request
     * @param response
     * @param modelMap
     * @return
     */
    @RequestMapping(value = "/getProjectFiles",method = RequestMethod.POST)
    @ResponseBody
    public DataResultSet getProjectFiles(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){
        int pageNo = ParamUtils.getInt(request, "pageNo", 1); // 页码
        int pageSize = ParamUtils.getInt(request, "pageSize", 10); // 取得显示条数
        String cxlx = ParamUtils.getString(request, "cxlx", ""); // 查查询类型 1|信托合同 2|信托计划说明书3|认购风险说明书 5|隐私协议|6用户服务协议
        String xmId = ParamUtils.getString(request, "xmId", ""); //发行方案id
        DataResultSet productHistory = prodService.getProjectFiles(pageNo,pageSize,cxlx,xmId);
        return productHistory;
    }

2、开始下载

 /**
     * 附件下载
     *
     * @param request
     * @param response
     */
    @RequestMapping("/downloadTwo")
    public void downloadFileTwo( HttpServletRequest request, HttpServletResponse response) {
        String fileName = request.getParameter("fileName");
        String downUrl = request.getParameter("downUrl");
        goToDownload(request, response, downUrl, fileName);
    }
    /**
     * 下载
     *
     * @param request
     * @param response
     * @param downUrl  下载的路径
     * @param fjmc     下载文件的名称
     */
    private void goToDownload(HttpServletRequest request, HttpServletResponse response, String downUrl, String fjmc) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/x-msdownload");
        try {
            String encodenickname = URLEncoder.encode(fjmc,"UTF-8");//转Unicode不然ie会乱码
            response.setHeader("Content-Disposition", "attachment;fileName=" + new String(encodenickname.getBytes("UTF-8"), "ISO8859-1"));
            //这里注掉的代码是本地测试的
//            String path = request.getSession().getServletContext().getRealPath("/");
//            String ATTACH_PATH= AppConfig.getInstance().getProperty("attach.base","");
//            if (StringUtils.isNotEmpty(ATTACH_PATH)) {
//                path = ATTACH_PATH;
//            }
//            logger.debug("=path===" + path);
            File file = new File( downUrl);
            if (!file.exists()) {
                response.sendError(404, "File not found!");
                return;
            }
            long fileLength = file.length();
            response.setHeader("Content-Length", String.valueOf(fileLength));
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
            bis.close();
            bos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

三、效果

在这里插入图片描述

直接点击文件图片或者文件,就可以下载。

在这里插入图片描述

上面测试,是在谷歌浏览器,火狐,IE也测试过了,亲测有效。

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

相关文章

  • Spring Boot整合JPA使用多个数据源的方法步骤

    Spring Boot整合JPA使用多个数据源的方法步骤

    这篇文章主要给大家介绍了关于Spring Boot整合JPA使用多个数据源的方法步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Springboot Cache @CacheEvict 无法模糊删除的解决方案

    Springboot Cache @CacheEvict 无法模糊删除的解决方案

    这篇文章主要介绍了Springboot Cache @CacheEvict 无法模糊删除的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot集成Swagger2项目实战

    Spring Boot集成Swagger2项目实战

    在日常的工作中,我们往往需要给前端(WEB端、IOS、Android)或者第三方提供接口,这个时候我们就需要给他们提供一份详细的API说明文档。这篇文章我们就来分享一种API文档维护的方式,即通过Swagger来自动生成Restuful API文档
    2018-01-01
  • 解决执行Junit单元测试报错java.lang.ClassNotFoundException问题

    解决执行Junit单元测试报错java.lang.ClassNotFoundException问题

    这篇文章主要介绍了解决执行Junit单元测试报错java.lang.ClassNotFoundException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 解决Unable to start embedded container SpringBoot启动报错问题

    解决Unable to start embedded container&nbs

    这篇文章主要介绍了解决Unable to start embedded container SpringBoot启动报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java 入门图形用户界面设计之事件处理下

    Java 入门图形用户界面设计之事件处理下

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的事件处理
    2022-02-02
  • JAVA如何使用Math类操作数据

    JAVA如何使用Math类操作数据

    这篇文章主要介绍了JAVA如何使用Math类操作数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解Spring集成Redis的两种方式

    详解Spring集成Redis的两种方式

    在工作中,我们用到分布式缓存的时候,第一选择就是Redis,今天介绍一下SpringBoot如何集成Redis的,具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • 详解关于Windows10 Java环境变量配置问题的解决办法

    详解关于Windows10 Java环境变量配置问题的解决办法

    这篇文章主要介绍了关于Windows10 Java环境变量配置问题的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 简单了解JAVA SimpleDateFormat yyyy和YYYY的区别

    简单了解JAVA SimpleDateFormat yyyy和YYYY的区别

    这篇文章主要介绍了简单了解JAVA SimpleDateFormat yyyy和YYYY的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论