Java 从服务器下载文件到本地(页面、后台、配置都有)

 

 先来看实现效果:

 

有一个链接如下:

点击链接下载文件:

 

 

 第一种方法:Servlet实现

 

一、HTML页面部分:

1、HTML页面中的一个链接

<a id="downloadTemplate" style="color:blue" οnclick="download();">下载导入模板</a>

 

2、引入JS

function download(){
    downloadTemplate('downloadExel.downloadexcel', 'filename', 'project');
}

/**
 * 用于下载导入模板时的影藏form表单的提交,采用post方式提交
 * @param action action映射地址
 * @param type parameter的名称
 * @param value parameter的值,这里为file的filename
 */
function downloadTemplate(action, type, value){
    var form = document.createElement('form');
    document.body.appendChild(form);
    form.style.display = "none";
    form.action = action;
    form.id = 'excel';
    form.method = 'post';
    
    var newElement = document.createElement("input");  
    newElement.setAttribute("type","hidden");  
    newElement.name = type;
    newElement.value = value;
    form.appendChild(newElement); 
    
    form.submit();
}

 

3、解释上面JS(不是正是代码)

相当于提交一个form,里面如下:

<input type=hidden name="filename" value = "project">

后台可以通过下面代码获得文件名:project

String filename = request.getParameter("filename");

(这段是上面js的翻译,不是正式的哦)

 

 

 二、配置部分

配置前台页面和后台交互

 

1、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    

    <servlet>
        <servlet-name>downloadServlet</servlet-name>
        <servlet-class>
            com.zit.rfid.app.prms.business.service.servlet.DownloadTemplateServlet
        </servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>downloadServlet</servlet-name>
        <url-pattern>*.downloadexcel</url-pattern>
    </servlet-mapping>
</web-app>

 

我这个web.xml不是整个工程的web.xml,只是一个模块的,在你的web.xml加入上面servlet和servlet-mapping里的内容即可

 

如上:

(1)接受 *.downloadexcel 的Action

(2)HTML的JS里的Action,交给com.test.DownloadTemplateServlet这个类去处理

 

 

2、WebContent目录下新建file文件夹,存放project.xls文件   (Eclipse的Web工程有WebContent,MyEclipse好像是WebRoot)

 

 

三、后台部分

1、新建一个servlet:  

DownloadTemplateServlet.java

package com.test;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * @author 0223000218
 *    主要用于下载导入模板,页面上传入的request中parameter中,filename代表了要下载的模板的名称
 */
public class DownloadTemplateServlet extends HttpServlet {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -4541729035831587727L;

    private final static String HOME_PATH = DownloadTemplateServlet.class.getResource("/").getPath();
    private final static String DOWNLOAD_TEMP_FILE = HOME_PATH.subSequence(0, HOME_PATH.indexOf("WEB-INF")) + "file/";
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String filename = req.getParameter("filename");
        try{
            resp.reset();// 清空输出流
            
            String resultFileName = filename + System.currentTimeMillis() + ".xls";
            resultFileName = URLEncoder.encode(resultFileName,"UTF-8");  
            resp.setCharacterEncoding("UTF-8");  
            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
            resp.setContentType("application/msexcel");// 定义输出类型
            //输入流:本地文件路径
            DataInputStream in = new DataInputStream(
                    new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));  
            //输出流
            OutputStream out = resp.getOutputStream();
            //输出文件
            int bytes = 0;
            byte[] bufferOut = new byte[1024];  
            while ((bytes = in.read(bufferOut)) != -1) {  
                out.write(bufferOut, 0, bytes);  
            }
            out.close();
            in.close();
        } catch(Exception e){
            e.printStackTrace();
            resp.reset();
            try {
                OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
                String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";
                writer.write(data); 
                writer.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
        
    }
    
    
}

 

大致步骤:

1. 获取服务器文件所在路径

2. 输入服务器文件

3. 输出文件到本地

 

 

 

第二种方法:SpringMVC实现

 

这种方法比较简单

 

一、JSP页面部分

和上面一样

<a id="downloadTemplate" style="color:blue" οnclick="download();">下载导入模板</a>

 

 

//导出模板下载
    function download(){
        //后台方法、文件类型、文件名
        downloadTemplate('${pageContext.request.contextPath}/cardIssueVehicleInfo/exportVehicleInfo', 'filename', 'test');
    }

    /**
     * 用于下载导入模板时的影藏form表单的提交,采用post方式提交
     * @param action 请求后台方法
     * @param type 文件类型
     * @param value 文件名
     */
    function downloadTemplate(action, type, value){
        var form = document.createElement('form');
        document.body.appendChild(form);
        form.style.display = "none";
        form.action = action;
        form.id = 'excel';
        form.method = 'post';
        
        var newElement = document.createElement("input");  
        newElement.setAttribute("type","hidden");  
        newElement.name = type;
        newElement.value = value;
        form.appendChild(newElement); 
        
        form.submit();
    }

 

 

二、后台部分

@RequestMapping("exportVehicleInfo")
    public void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {
        String filename = req.getParameter("filename");
        DataInputStream in = null;
        OutputStream out = null;
        try{
            resp.reset();// 清空输出流
            
            String resultFileName = filename + System.currentTimeMillis() + ".xls";
            resultFileName = URLEncoder.encode(resultFileName,"UTF-8");  
            resp.setCharacterEncoding("UTF-8");  
            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
            resp.setContentType("application/msexcel");// 定义输出类型
            //输入流:本地文件路径
            in = new DataInputStream(
                    new FileInputStream(new File(downloadPath + "test.xls")));  
            //输出流
            out = resp.getOutputStream();
            //输出文件
            int bytes = 0;
            byte[] bufferOut = new byte[1024];  
            while ((bytes = in.read(bufferOut)) != -1) {  
                out.write(bufferOut, 0, bytes);  
            }
        } catch(Exception e){
            e.printStackTrace();
            resp.reset();
            try {
                OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
                String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";
                writer.write(data); 
                writer.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }finally {
            if(null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java新闻系统是一种基于Java语言开发的网站或应用程序,用于展示和管理新闻内容。想要下载Java新闻系统的源码,首先需要确定自己的下载途径。一般情况下,我们可以在开源代码托管平台如GitHub、Bitbucket等上找到Java新闻系统的项目,并将其源代码下载到本地。 在这些代码托管平台上,可以通过搜索功能或者浏览不同的项目分类来寻找Java新闻系统。一旦找到了合适的项目,可以点击进入项目页面,通常会有详细的项目说明和README文件,以及相关的源代码文件和结构。 要下载Java新闻系统的源码,常见的方式是通过克隆或下载项目的代码库。如果项目使用的是Git版本控制系统,可以选择克隆项目到本地,使用命令行工具或者Git客户端进行操作。如果项目提供了直接下载源码的选项,也可以选择下载压缩包文件到本地。 无论是克隆还是下载,完成之后,就可以将源代码文件导入到Java集成开发环境(IDE)中,例如Eclipse、IntelliJ IDEA等。在IDE中打开源代码文件夹,可以进行代码编辑、编译、调试等操作。根据具体的项目要求和自己的需求,可能还需要配置数据库、服务器等环境。 值得一提的是,下载Java新闻系统的源码只是第一步,还需要根据自己的需求进行相应的配置和定制化开发。这可能包括修改系统的外观和布局、添加新功能、定制后台管理界面等等。 总结起来,要下载Java新闻系统的源码,首先要找到合适的代码托管平台,然后选择合适的项目,进行克隆或下载操作。最后,利用Java开发工具将源代码导入IDE,根据需求进行定制化开发。 ### 回答2: 要下载一个Java新闻系统的源码,你可以按照以下步骤进行操作: 首先,你可以在网络上搜索Java新闻系统的源码。可以选择使用一些知名的源码托管平台,比如GitHub或Bitbucket等。在这些平台上,你可以找到很多开源的项目,包括Java新闻系统。 其次,你需要仔细筛选并选择一个适合你需求的Java新闻系统的源码。建议选择一个已经经过多人贡献和审核的项目,如Star数量较多或有稳定版本的项目。 接下来,你可以点击项目页面上的"Clone"或"Download"按钮,将源码下载到本地。如果你使用Git版本控制系统,你也可以使用Git命令克隆该项目到本地目录。 下载完成后,你可以使用Java开发工具(如Eclipse、IntelliJ IDEA等)打开源码所在的文件夹。 在开发环境中,你需要根据新闻系统的源码结构和文件组织,进行相关配置和设置。这可能涉及到数据库连接、权限管理、配置文件等方面的操作。 完成配置后,你可以使用Java编译器编译项目,确保代码没有错误。如果项目使用了依赖管理工具(如Maven、Gradle等),你也需要下载所需的依赖库。 最后,你可以根据自己的需求对源码进行修改或扩展,添加自己的功能或界面。你可以通过阅读源码中的注释和文档,来了解如何使用和扩展该新闻系统。 总结来说,下载Java新闻系统的源码涉及到搜索、选择、下载配置和编译等步骤。通过这些步骤,你可以获得一个可用于开发和修改的Java新闻系统源码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值