Eclipse rap 富客户端开发总结(9) : rap上传与下载
一 上传
上传即将文件上传到服务器上,在客户端需要写相应的脚本,服务器端需要注册相应的 handle 接受客户端的请求。
原理:
Rap 的上传和下载是通过普通的 web 的方式进行上传和下载的 , 但是和传统的 wen 还不相同
1、 rap 本身就单线程在跑 , 和上传下载的线程不能进行混淆
所以采用的方式如下:
上传:通过传统的方式上传到指定目录 ,rap 不能直接操作上传的文件流 , 如果想获得上传的数据必须要先上传到指定文件 , 然后让rap 去加载指定文件即可
下载: 先通过 rap 程序生成需要下载的文件到指定目录 , 然后通过 rap 加载成文件流的形式发送给客户端
1 在服务器端注册相应的 handler
- // 注册上传处理事件
- IServiceManager manager = RWT.getServiceManager ();
- IServiceHandler uploadHandler = new UploadServiceHandler();
- anager.registerServiceHandler( "uploadServiceHandler" , uploadHandler); //$NON-NLS-1$
2 在客户端的脚本调用
目前的做法是创建上传的 dialog, 在 dialog 里面添加 browser 控件,然后 browser 里书写上传的 javaScript 脚本,脚本请求的 url 格式可以通过以下类似的代码创建:
- private String createUploadUrl(String uploadFileName) {
- StringBuffer url = new StringBuffer();
- url.append(RWT.getRequest ().getContextPath());
- url.append(RWT.getRequest ().getServletPath());
- url.append( "?" ); //$NON-NLS-1$
- url.append(IServiceHandler . REQUEST_PARAM );
- url.append( "=uploadServiceHandler" ); //$NON-NLS-1$
- url.append( "&fileName=" ); //$NON-NLS-1$
- url.append(uploadFileName);
- return url.toString();
- }
3 服务器端 handler 的写法
- public class UploadServiceHandler implements IServiceHandler {
- public void service() throws IOException, ServletException {
- HttpServletRequest request = RWT.getRequest ();
- request.setCharacterEncoding( "UTF-8" );
- String fileName = request.getParameter( "fileName" );
- FileOutputStream o = null ;
- BufferedReader bufferReader = null ;
- InputStream in = null ;
- try {
- in = request.getInputStream();
- File f = null ;
- try {
- f = new File(FileUtil.getTempFilePathAndName (RWT.getRequest ()
- .getSession().getAttribute( "userName" ).toString(),
- fileName));
- } catch (Exception e) {
- throw new IOException(e);
- }
- o = new FileOutputStream(f);
- bufferReader = new BufferedReader( new InputStreamReader(in));
- String line = null ;
- boolean beginWrite = false ;
- boolean endWrite = false ;
- while ((line = bufferReader.readLine()) != null ) {
- if (line.indexOf(PriceDomainBean. class .getName()) != -1) {
- if (!beginWrite) {
- beginWrite = true ;
- } else {
- endWrite = true ;
- }
- }
- if (beginWrite) {
- o.write((line + "\r\n" ).getBytes());
- }
- if (endWrite) {
- break ;
- }
- }
- } catch (IOException e) {
- throw e;
- } finally {
- if ( null != o) {
- o.close();
- }
- in.close();
- if ( null != bufferReader) {
- bufferReader.close();
- }
- }
- HttpServletResponse response = RWT.getResponse ();
- response.setContentType( "text/html;charset=UTF-8" );
- response.getWriter().write(
- "<br><br><br><DIV align=center><h2> 上传成功 !</h2>" );
- }
- }
二 下载
下载和上传采用的方式基本相同,只不过是将服务器文件读取到本地,和上传是一个相反的过程。
1 在服务器端注册相应的 handler
- // 注册下载处理事件
- IServiceManager manager = RWT.getServiceManager ();
- IServiceHandler downloadHandler = new DownloadServiceHandler();
- manager.registerServiceHandler( "downloadServiceHandler" , downloadHandler);
2 在客户端节本的调用
在 bowser 控件中书写 js 请求脚本,脚本请求的 url 如下
- private String createDownloadUrl(String fileName) {
- StringBuffer url = new StringBuffer();
- url.append (RWT.getRequest ().getContextPath());
- url.append (RWT.getRequest ().getServletPath());
- url.append ( "?" );
- url.append (IServiceHandler. REQUEST_PARAM );
- url.append ( "=downloadServiceHandler" );
- url.append ( "&fileName='+encodeURI('" );
- url.append (fileName);
- url.append ( "')" );
- return url.toString();
- }
3 服务器端 handler 的写法
- public class DownloadServiceHandler implements IServiceHandler {
- public void service() throws IOException, ServletException {
- String fileName = URLDecoder.decode (
- RWT.getRequest ().getParameter( "fileName" ), "UTF-8" );
- String filePathAndName = null ;
- try {
- filePathAndName = FileUtil
- .getTempFilePathAndName (RWT.getRequest ().getSession()
- .getAttribute( "userName" ).toString(), fileName);
- } catch (Exception e) {
- throw new IOException(e);
- }
- File file = new File(filePathAndName);
- if (!file.exists()) {
- return ;
- }
- HttpServletResponse response = RWT.getResponse ();
- response.setHeader( "pragma" , "no-cache" );
- response.setHeader( "cache-control" , "no-cache" );
- response.setDateHeader( "Expires" , 0);
- response.setCharacterEncoding( "UTF-8" );
- response.setContentType( "text/html;charset=UTF-8" );
- response.setHeader( "Content-Disposition" , "attachment;filename="
- + new String(fileName.getBytes( "gb2312" ), "ISO8859-1" ));
- try {
- BufferedInputStream in = new BufferedInputStream(
- new FileInputStream(filePathAndName));
- ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
- byte [] temp = new byte [1024];
- int size = 0;
- while ((size = in.read(temp)) != -1) {
- out.write(temp, 0, size);
- }
- in.close();
- byte [] content = out.toByteArray();
- response.setContentLength(content. length );
- response.getOutputStream().write(content);
- } catch (IOException ioe) {
- throw new RuntimeException(ioe);
- } finally {
- try {
- FileUtil.deleteTempFile (RWT.getRequest ().getSession()
- .getAttribute( "userName" ).toString(), fileName);
- } catch (Exception e) {
- throw new IOException(e);
- }
- }
- }
- }
Eclipse rap 富客户端开发总结(9) : rap上传与下载的更多相关文章
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- Eclipse rap 富客户端开发总结(3):rcp/rap目前界面上的一些差异
1. Label和Button按钮的显示的差异 当Label 和 Button显示的文字过长显示不开的时候,rcp.rap的处理方式就不一样了,rap显示不开会自己截取掉后面的文字,rcp会在文字的中 ...
- Eclipse rap 富客户端开发总结(15) :rap如何使用js
1. 把输入的字符串当 javascript 执行 try { RWT.getResponse().getWriter().println("alert('123');"); } ...
- Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理
一.概述 在进行了 rap 的基本学习之后,您对 rap 的理解是否进入了更高的一个层次呢,个人觉得,对学习 rap 的人来说,进行 rap 的学习是一个探索的过程,在编程中不断的对其进行理解和分析, ...
- Eclipse rap 富客户端开发总结(4):如何搭建 rap 中文开发环境
Rap中文开发环境搭建大约分为2个部分 1. rap国际化,详细参加文章(rap开发经验总结(5)-rap国际化之路) 2.rap自带的JFace ,Dialog 等国际化 1.中文包下载地址: h ...
- Eclipse rap 富客户端开发总结(2):rap项目目前的进度和存在的问题
1. Eclipse rap项目目前的进度 目前rap 的最新版本是 rap 1.5M4,最稳定版本是 rap 1.4.1,我们项目目前使用的版本是rap 1.4.1,Rap目前已经支持的部分是 sw ...
- Eclipse rap 富客户端开发总结(1) :rap简单介绍和开发环境搭建
一.rap简单介绍 1 基本概念 RAP可以让开发人员使用JAVA API和按照Eclipse 插件的开发模式构建基于AJAX的Web 2.0应用程序, RAP的工作原理是采用交叉编译的方式将 ...
- JavaScript开发——文件夹的上传和下载
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- B/S开发——文件夹的上传和下载
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
随机推荐
- 学习设计模式之MVC、MVP、MVVM
引言:认真学习了下广义MVC模式下前端怎么写,狭义的MVC其实是有一个变化过程:MVC MVP MVVM,网上看了很多的关于这方面的介绍,以前总是将视图数据逻辑写一个模块,最近尝试分开并用组件式的开发 ...
- Java 图片处理解决方案:ImageMagick 快速入门
一.ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件,可以实现图片切割.颜色替换.图片缩略图.图片水印等各种效果.ImageMagick是免费开源软件,支持大多 ...
- javascript DOM 笔记
以下内容来自<javasript DOM 编程艺术>第二版 dom中三种重要的节点:元素节点.属性节点.文本节点. 几种节点的重要属性:nodeValue,nodeType(为数字1.2. ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
该篇为“啰里啰嗦版”,另有相应的“精简版”供参考 “不到长城非好汉:不做OS,枉为程序员” OS之于程序员,如同梵蒂冈之于天主教徒,那永远都是块神圣的领土.若今生不能亲历之,实乃憾事! 但是,圣域不是 ...
- Struts2学习笔记(二)——配置详解
1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin. ...
- 使用Visual Studio Code和typescript 开发调试React Native项目
关于React Native的详细介绍我就不叙述了,他是使用js构建原声app的开发框架.一次变异多平台运行,非常强大.但是个人不喜欢js的过于灵活(弱类型)的语法.强大的强类型语言Typescrip ...
- WeQuant交易策略—MACD
MACD(指数平滑异同平均线)策略简介MACD指标应该是大家最常见的技术指标,在很多股票.比特币的软件中都是默认显示的.MACD是从双指数移动平均线发展而来的.意义和双移动平均线基本相同,即由快.慢均 ...
- Maven详解(八)------ 继承和聚合
1.继承 需求场景: 有三个 Maven 工程,每个工程都依赖某个 jar 包,比如 Junit,由于 test 范围的依赖不能传递,它必然会分散在每个工程中,而且每个工程的jar 包版本可能不一致. ...
- 大数据平台搭建-spark集群安装
版本要求 java 版本:1.8.*(1.8.0_60) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...
- webpack打包处理html、css、js、img、scss文件
webpack --help 查看webpack命令启动服务 npm run dev (先配置好服务)进入对应文件夹并初始化npmcd demo npm init 安装webpack npm inst ...