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

目录
  • 一、前端代码
    • 1、html代码
    • 2、js代码
    • 3、css样式
  • 二、后台代码
    • 1、获取文件
    • 2、开始下载
  • 三、效果

最近做项目,使用的技术较老,前端用的架构是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也测试过了,亲测有效。

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

(0)

相关推荐

  • Java远程连接Linux服务器并执行命令及上传文件功能

    最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记. 此种连接方法中有考虑到并发问题,在进行创建FTP连接的时候将每一个连接对象存放至 ThreadLocal<Ftp> 中以确保每个线程之间对FTP的打开与关闭互不影响. package com.test.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileFilter; import java.io.FileIn

  • Java连接Linux服务器过程分析(附代码)

    这篇文章主要介绍了Java连接Linux服务器过程分析(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 pom文件添加依赖 <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 --> <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>

  • java实现两台服务器间文件复制的方法

    本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

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

    目录 一.前端代码 1.html代码 2.js代码 3.css样式 二.后台代码 1.获取文件 2.开始下载 三.效果 最近做项目,使用的技术较老,前端用的架构是jsp,主要技术是jquery.js.css.html等,后端用到的主要是springmvc.存储过程等. 下面是一个文件下载的简单实现.主要是客户在浏览器点击一个pdf文件,进行下载.改文件存在于公司的服务器上. 一.前端代码 1.html代码 <div class="border-gb-title">项目文件&

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

  • java 从服务器下载文件并保存到本地的示例

    昨天在做一个项目时,用到了从服务器上下载文件并保存到本地的知识,以前也没有接触过,昨天搞了一天,这个小功能实现了,下面就简单的说一下实现过程: 1.基础知识 当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步: (1)客户端发起一个url请求,获取连接对象. (2)服务器解析url,并且将指定的资源返回一个输入流给客户. (3)建立存储的目录以及保存的文件名. (4)输出了写数据. (5)关闭输入流和输出流. 2.实现代码的方法 /** *

  • .net从服务器下载文件中文名乱码解决方案

    从服务器下载文件中文名乱码解决方案,具体文字说明不多了,直接贴代码了,具体代码如下: try { string excelName = Request["excelName"].ToString(); //文件路径 string fileName = Request["fileName"].ToString(); //下载的文件名 if(!(string.IsNullOrEmpty(excelName)|| string.IsNullOrEmpty(fileName

  • Linux服务器删除文件夹、删除文件、解压命令的方法

    一.删除文件夹 例:rm -rf /usr/java 将会删除/usr/java目录以及其下所有文件.文件夹 二.删除文件 例:rm -f /usr/tomcat/conf/server.xml 将会强制删除/usr/tomcat/conf/server.xml这个文件 三.解压 1. 解压到当前目录 例:tar -zxvf jdk-8u131-linux-x64.tar.gz 会将jdk-8u131-linux-x64.tar.gz解压到其所在的当前目录下 以上这篇Linux服务器删除文件夹.

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • python实现从ftp服务器下载文件的方法

    本文实例讲述了python实现从ftp服务器下载文件的方法.分享给大家供大家参考.具体实现方法如下: import ftplib ftp = ftblib.FTP("ftp.yourServer.com") ftp.login("username","password") filename = "index.html" ftp.storlines("STOR "+filename,open(filename

  • java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.In

随机推荐