`
panfugen
  • 浏览: 25719 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java实现文件下载讲解

阅读更多

前台是用GWT写的获取请求服务器端的地址方法:

 

 private void getAddress() {
        ModifyCurrentPasswordService.Util.getInstance().getServerPath(new AsyncCallback<String>() {

            public void onFailure(Throwable exception) {
                ExceptionHandler.handle(exception);
            }

            public void onSuccess(String path) {
                downLoad(path);
            }
        });
    }

  

  定义的方法有两个接口一个实现类: 接口1.ModifyCurrentPasswordService

 

public interface ModifyCurrentPasswordService extends RemoteService {
    public ResultMessage  modifyCurrentPassword(String oldPass,String newPass,String userId);

    public String getServerPath();
    public static class Util {
        private static ModifyCurrentPasswordServiceAsync instance;

        public static ModifyCurrentPasswordServiceAsync getInstance() {
            if (instance == null) {
                instance = (ModifyCurrentPasswordServiceAsync) GWT.create(ModifyCurrentPasswordService.class);
                ServiceDefTarget target = (ServiceDefTarget) instance;
                target.setServiceEntryPoint(GWT.getModuleBaseURL() + "gwt-services/modifyCurrentPassword-service");
            }
            return instance;
        }
    }

}

 

 

接口2.ModifyCurrentPasswordServiceAsync

public interface ModifyCurrentPasswordServiceAsync {
    public void  modifyCurrentPassword(String oldPass,String newPass,String userId, AsyncCallback<ResultMessage> callback);

    public void getServerPath(AsyncCallback<String> callback);

}

  

实现类ModifyCurrentPasswordServiceImpl 

 

public class ModifyCurrentPasswordServiceImpl extends RemoteServiceServlet implements ModifyCurrentPasswordService {

    /**
     * @author 
     * @since 2009-7-30
     */
    private static final long serialVersionUID = 7889155041042199323L;

    private static Logger log = Logger.getLogger(ModifyCurrentPasswordServiceImpl.class);

    private UserBizFacade userBizFacade;
    
    private  String address;

    public ResultMessage modifyCurrentPassword(String oldPass, String newPass, String userId) {
        ResultMessage message = new ResultMessage();
        try {
            UserDto userDto = null;
            if (userId != null) {
                log.debug("-------------------------------------------"+userId);
                userDto = this.userBizFacade.findUserById(Integer.parseInt(userId));
                // 解密
                DESEncry des = DESEncry.init();
                String originPass = des.ClsDESCode(userDto.getPin());
                if (originPass.compareTo(oldPass) == 0) {
                    // 加密
                    String newEncCode = des.ClsEncCode(newPass);
                    if (userDto != null) {
                        userDto.setPin(newEncCode);
                        update(userDto);
                        message.setResultMsg("success");
                    } else {
                        message.setResultMsg("failure");
                    }
                } else {
                    message.setResultMsg("error");
                }
            } else
                message.setResultMsg("failure");

        } catch (Exception e) {

        }
        return message;
    }

    private   synchronized    void update(UserDto userDto) {
        this.userBizFacade.saveUser(userDto, null);
    }

    public UserBizFacade getUserBizFacade() {
        return userBizFacade;
    }

    public void setUserBizFacade(UserBizFacade userBizFacade) {
        this.userBizFacade = userBizFacade;
    }

    public String getServerPath() {
        String realpath="";
        address=ModifyCurrentPasswordServiceImpl.class.getClassLoader().getResource(String.valueOf(File.separatorChar)).getPath();
        String path[]=address.split("/WEB-INF");
        realpath=path[0]+"/doc";
        log.debug("realpath is"+realpath);
        return realpath;
    }
}

 

 

 

 发送请求的方法

private void downLoad(String path) {
        /*
         * Linux下文件路径需要加"/"
         * Windows下不需要加"/"
         */
        String address = "";
        if (sign.equals("service")) {
            path = path + "/AiXinFuWuTaiCaoZuoShuoMing.doc";
        } else if (sign.equals("sale")) {
            path = path + "/AiXinXiaoShouCaoZuoShuoMing.doc";
        } else {
            path = path + "/AiXinXiaoZhiJianCaoZuoShuoMing.doc";
        }
        if (path.substring(0, 1).equals("/")) {
            address = path.substring(1);
        } else {
            address = path;
        }
        Location.replace(GWT.getHostPageBaseURL() + "fileDownLoadController?address=" + address);
    }

  

 

 

 rpc调用请求配置 请求地址的配置

web.xml

 

<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/fileDownLoadController</url-pattern>
    </servlet-mapping>
     <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/downloadCreateCardFiled</url-pattern>
    </servlet-mapping>
    

  

dispatcher-servlet.xml

 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
               
        <property name="mappings">
        	<props>
            	<prop key="/fileDownLoadController">helpDownLoadController</prop>
            	<prop key="/downloadCreateCardFiled">creationFileDownloadController</prop>
        	</props>
        </property>
    </bean>


 <bean id="creationFileDownloadController" class="com.***.crs.gxt.server.service.CardCreationFileDownloadController"></bean>

 <bean id="helpDownLoadController"  class="com.***.loveJewelry.ui.indexLovo.server.service.FileDownLoadController"/>

 

 

 

 

 从服务器端读写到本地硬盘FileDownLoadController类

 

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

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

import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class FileDownLoadController implements Controller {
    private static final Log log = LogFactory.getLog(FileDownLoadController.class);

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String address = request.getParameter("address");
        log.debug("address of request is " + address);
        if (null == address) {
            return null;
        }
        String fileName=address.substring(address.lastIndexOf("/")+1);
        File file=new File(address);
        response.setContentType("application/x-msdownload");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        OutputStream  out;
        FileInputStream  fis=null;
        try{
            out=response.getOutputStream();
            fis=new FileInputStream(file);
            IOUtils.copy(fis, out);
            IOUtils.closeQuietly(fis);
        }
        catch (IOException e) {
            log.error("Unexpected exception occurred", e);
            IOUtils.closeQuietly(fis);
        }
        return null;
    }

}

  

 

分享到:
评论

相关推荐

    单点登录sso的原理与java实现详细讲解与示例(文档与源码)

    单点登录sso的原理与java实现详细讲解与示例(文档与源码)

    java.io包讲解

    专业的课程讲解 所有的程序都离不开信息的输入和输出。例如,从键盘读取数据、在网络上交换数据、打印报表、读写文件信息等,都要涉及数据输入输出的处理。在面向对象语言中,输入和输出都是通过数据流来实现的。在...

    用java实现本地语音实时采取,然后对接阿里AI语音识别实现,语音识别系统。并内部加载逻辑实现电脑语音控制

    用java实现本地语音实时采取,然后对接阿里AI语音识别实现,语音识别系统。并内部加载逻辑实现电脑语音控制

    JAVA视频OOP-IO流技术讲解视频

    javaOOP必看精华视频资料,1:主要介绍IO流中的递归 2:文件输出导出数据与文件输入导入数据...视频中多数讲解IO流的原理及如何通过代码实现文件的输入与输出具体实现方法的实践,大量的实践案列操作,及递归如何实现

    JSch - Java实现的SFTP(文件下载详解篇)

    浏览博客时看到的关于JSCH工具实现文件下载的功能,讲解很详细,文档中也包含了原文章的路径。

    java实现IPHONE推送功能技术文档

    这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2....三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解原理和简单的例子,让学者更好的掌握,希望能帮助到大家!

    分形算法与程序设计Java实现代码

    分形算法与程序设计——Java实现,此光盘收录的是《分形算法与程序设计java版》一书中所讲解的程序设计的源代码及部分供参考的效果图。具体内容和使用方法如下: 文件夹&lt;第2章JAVA&gt;包括: &lt;2_01&gt;:内含Cantor三分...

    JAVA+IREPORT实现报表功能

    此文档相信讲解IREPORT的使用,以及用JAVA代码实现PDF EXCEL 的生成!

    Java实现局域网内两点文件传输

    Java实现局域网内两点文件传输,接收端收到doc,docx,pdf类型的文件后自动调用虚拟打印机接口,实现打印pdf文件的功能。其中包括实现的原理,以及操作实现的源代码、实现的步骤、每一实现步骤对应的讲解,包括代码...

    基于java的企业级应用开发:文件上传和下载.ppt

    开发文件上传表单页面 在实现文件上传时,首先需要设置文件上传表单,这个表单的提交方式必须为POST。另外,还需要增加上传的属性enctype= “multipart/form-data”,该属性说明浏览器可以提供文件上传功能。 2.编写...

    java网络编程

    对java网络编程的进一步讲解,提升对java网络编程的了解

    一种java与openCV结合实现的目标检测模块

    一篇值得的参考的文档,主要讲解了java与OPenCV结合实现的目标检测模块,详细地讲述了利用JN1技术调用openCV目标检测方法的具体步骤和关键过程。

    Java实现FTP文件的上传和下载功能的实例代码

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。接下来通过本文给大家实例讲解Java实现FTP文件的上传和下载功能,需要的的朋友一起看看吧

    小游戏俄罗斯方块java实现

    包含详解的文档说明,视频讲解,利用java实现的俄罗斯方块小游戏,可直接运行

    JSch - Java实现的SFTP(文件上传详解篇)

    浏览博客时看到的关于JSCH工具实现文件上传的功能,讲解很详细,文档中也包含了原文章的路径。

    Java线程池文档

    Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExecutor使用和思考》[6] ...

    Java语言基础下载

    JAVA操纵XML 实例讲解 414 通过JAVA写数据到XML里面 415 内容总结 418 独立实践 418 第二十三章:HTML基础 419 学习目标 419 知识要点 420 HTML元素 420 标签属性 420 HTML基本标签 422 标题元素 422 HTML格式 427 ...

    【计算机毕业设计】JAVA基础项目【源码+lw+部署文档+讲解】

    源码包括了项目的Java代码,部署文档详细介绍了项目的部署步骤和环境配置要求,讲解内容涵盖了项目的功能模块、技术选型理由、设计思路以及使用方法。 适合人群:计算机专业的学生或者开发初学者,对Java编程有一定...

    java datetime

    该文件主要讲解了如何通过java的date类来实现日期的实现。

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    Java SE实践教程 pdf格式电子书 下载(一) 更新 http://download.csdn.net/source/2824033 Java SE实践教程 pdf格式电子书 下载(二) 更新 http://download.csdn.net/source/2824040 Java SE实践教程 pdf格式...

Global site tag (gtag.js) - Google Analytics