一 上传

上传即将文件上传到服务器上,在客户端需要写相应的脚本,服务器端需要注册相应的 handle 接受客户端的请求。

原理:

Rap 的上传和下载是通过普通的 web 的方式进行上传和下载的 , 但是和传统的 wen 还不相同

1、  rap 本身就单线程在跑 , 和上传下载的线程不能进行混淆

所以采用的方式如下:

上传:通过传统的方式上传到指定目录 ,rap 不能直接操作上传的文件流 , 如果想获得上传的数据必须要先上传到指定文件 , 然后让rap 去加载指定文件即可

下载: 先通过 rap 程序生成需要下载的文件到指定目录 , 然后通过 rap 加载成文件流的形式发送给客户端

1 在服务器端注册相应的 handler

  1. // 注册上传处理事件
  2. IServiceManager manager = RWT.getServiceManager ();
  3. IServiceHandler uploadHandler = new UploadServiceHandler();
  4. anager.registerServiceHandler( "uploadServiceHandler" , uploadHandler); //$NON-NLS-1$

2 在客户端的脚本调用

目前的做法是创建上传的 dialog, 在 dialog 里面添加 browser 控件,然后 browser 里书写上传的 javaScript 脚本,脚本请求的 url 格式可以通过以下类似的代码创建:

  1. private String createUploadUrl(String uploadFileName) {
  2. StringBuffer url = new StringBuffer();
  3. url.append(RWT.getRequest ().getContextPath());
  4. url.append(RWT.getRequest ().getServletPath());
  5. url.append( "?" ); //$NON-NLS-1$
  6. url.append(IServiceHandler . REQUEST_PARAM );
  7. url.append( "=uploadServiceHandler" ); //$NON-NLS-1$
  8. url.append( "&fileName=" ); //$NON-NLS-1$
  9. url.append(uploadFileName);
  10. return url.toString();
  11. }

3 服务器端 handler 的写法

  1. public class UploadServiceHandler implements IServiceHandler {
  2. public void service() throws IOException, ServletException {
  3. HttpServletRequest request = RWT.getRequest ();
  4. request.setCharacterEncoding( "UTF-8" );
  5. String fileName = request.getParameter( "fileName" );
  6. FileOutputStream o = null ;
  7. BufferedReader bufferReader = null ;
  8. InputStream in = null ;
  9. try {
  10. in = request.getInputStream();
  11. File f = null ;
  12. try {
  13. f = new File(FileUtil.getTempFilePathAndName (RWT.getRequest ()
  14. .getSession().getAttribute( "userName" ).toString(),
  15. fileName));
  16. } catch (Exception e) {
  17. throw new IOException(e);
  18. }
  19. o = new FileOutputStream(f);
  20. bufferReader = new BufferedReader( new InputStreamReader(in));
  21. String line = null ;
  22. boolean beginWrite = false ;
  23. boolean endWrite = false ;
  24. while ((line = bufferReader.readLine()) != null ) {
  25. if (line.indexOf(PriceDomainBean. class .getName()) != -1) {
  26. if (!beginWrite) {
  27. beginWrite = true ;
  28. } else {
  29. endWrite = true ;
  30. }
  31. }
  32. if (beginWrite) {
  33. o.write((line + "\r\n" ).getBytes());
  34. }
  35. if (endWrite) {
  36. break ;
  37. }
  38. }
  39. } catch (IOException e) {
  40. throw e;
  41. } finally {
  42. if ( null != o) {
  43. o.close();
  44. }
  45. in.close();
  46. if ( null != bufferReader) {
  47. bufferReader.close();
  48. }
  49. }
  50. HttpServletResponse response = RWT.getResponse ();
  51. response.setContentType( "text/html;charset=UTF-8" );
  52. response.getWriter().write(
  53. "<br><br><br><DIV align=center><h2> 上传成功 !</h2>" );
  54. }
  55. }

二 下载

下载和上传采用的方式基本相同,只不过是将服务器文件读取到本地,和上传是一个相反的过程。

1 在服务器端注册相应的 handler

  1. // 注册下载处理事件
  2. IServiceManager manager = RWT.getServiceManager ();
  3. IServiceHandler downloadHandler = new DownloadServiceHandler();
  4. manager.registerServiceHandler( "downloadServiceHandler" , downloadHandler);

2 在客户端节本的调用

在 bowser 控件中书写 js 请求脚本,脚本请求的 url 如下

  1. private String createDownloadUrl(String fileName) {
  2. StringBuffer url = new StringBuffer();
  3. url.append (RWT.getRequest ().getContextPath());
  4. url.append (RWT.getRequest ().getServletPath());
  5. url.append ( "?" );
  6. url.append (IServiceHandler. REQUEST_PARAM );
  7. url.append ( "=downloadServiceHandler" );
  8. url.append ( "&fileName='+encodeURI('" );
  9. url.append (fileName);
  10. url.append ( "')" );
  11. return url.toString();
  12. }

3 服务器端 handler 的写法

    1. public class DownloadServiceHandler implements IServiceHandler {
    2. public void service() throws IOException, ServletException {
    3. String fileName = URLDecoder.decode (
    4. RWT.getRequest ().getParameter( "fileName" ), "UTF-8" );
    5. String filePathAndName = null ;
    6. try {
    7. filePathAndName = FileUtil
    8. .getTempFilePathAndName (RWT.getRequest ().getSession()
    9. .getAttribute( "userName" ).toString(), fileName);
    10. } catch (Exception e) {
    11. throw new IOException(e);
    12. }
    13. File file = new File(filePathAndName);
    14. if (!file.exists()) {
    15. return ;
    16. }
    17. HttpServletResponse response = RWT.getResponse ();
    18. response.setHeader( "pragma" , "no-cache" );
    19. response.setHeader( "cache-control" , "no-cache" );
    20. response.setDateHeader( "Expires" , 0);
    21. response.setCharacterEncoding( "UTF-8" );
    22. response.setContentType( "text/html;charset=UTF-8" );
    23. response.setHeader( "Content-Disposition" , "attachment;filename="
    24. + new String(fileName.getBytes( "gb2312" ), "ISO8859-1" ));
    25. try {
    26. BufferedInputStream in = new BufferedInputStream(
    27. new FileInputStream(filePathAndName));
    28. ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
    29. byte [] temp = new byte [1024];
    30. int size = 0;
    31. while ((size = in.read(temp)) != -1) {
    32. out.write(temp, 0, size);
    33. }
    34. in.close();
    35. byte [] content = out.toByteArray();
    36. response.setContentLength(content. length );
    37. response.getOutputStream().write(content);
    38. } catch (IOException ioe) {
    39. throw new RuntimeException(ioe);
    40. } finally {
    41. try {
    42. FileUtil.deleteTempFile (RWT.getRequest ().getSession()
    43. .getAttribute( "userName" ).toString(), fileName);
    44. } catch (Exception e) {
    45. throw new IOException(e);
    46. }
    47. }
    48. }
    49. }

Eclipse rap 富客户端开发总结(9) : rap上传与下载的更多相关文章

  1. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  2. Eclipse rap 富客户端开发总结(3):rcp/rap目前界面上的一些差异

    1. Label和Button按钮的显示的差异 当Label 和 Button显示的文字过长显示不开的时候,rcp.rap的处理方式就不一样了,rap显示不开会自己截取掉后面的文字,rcp会在文字的中 ...

  3. Eclipse rap 富客户端开发总结(15) :rap如何使用js

    1. 把输入的字符串当 javascript 执行 try { RWT.getResponse().getWriter().println("alert('123');"); }  ...

  4. Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理

    一.概述 在进行了 rap 的基本学习之后,您对 rap 的理解是否进入了更高的一个层次呢,个人觉得,对学习 rap 的人来说,进行 rap 的学习是一个探索的过程,在编程中不断的对其进行理解和分析, ...

  5. Eclipse rap 富客户端开发总结(4):如何搭建 rap 中文开发环境

    Rap中文开发环境搭建大约分为2个部分 1.  rap国际化,详细参加文章(rap开发经验总结(5)-rap国际化之路) 2.rap自带的JFace ,Dialog 等国际化 1.中文包下载地址: h ...

  6. Eclipse rap 富客户端开发总结(2):rap项目目前的进度和存在的问题

    1. Eclipse rap项目目前的进度 目前rap 的最新版本是 rap 1.5M4,最稳定版本是 rap 1.4.1,我们项目目前使用的版本是rap 1.4.1,Rap目前已经支持的部分是 sw ...

  7. Eclipse rap 富客户端开发总结(1) :rap简单介绍和开发环境搭建

    一.rap简单介绍 1 基本概念     RAP可以让开发人员使用JAVA API和按照Eclipse 插件的开发模式构建基于AJAX的Web 2.0应用程序, RAP的工作原理是采用交叉编译的方式将 ...

  8. JavaScript开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  9. B/S开发——文件夹的上传和下载

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

随机推荐

  1. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展camelize与dasherize方法(3)

    在此之前,我们已经完成了4个方法: trimLeft, trimRight, trim, capitalize 本文,我们扩展驼峰式与下划线转化这两个对称的方法 camelize: 把空格,下划线,中 ...

  2. Go的变量作用域

    Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内部定义的变量称为局部变量 函数外部定义的变量称为全局变量 ...

  3. node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()

    1.setTimeout函数与clearTimeout函数 setTimeout(cb,ms,[arg],[...])延时一定时间执行回调函数该函数中cb参数为必填函数,为需要执行的回调函数ms为经过 ...

  4. Ignite Web 控制台(使用官方免费部署的控制台)

    前提: 假设已安装ignite,并且安装路径为:/usr/apache-ignite-fabric-2.1.0-bin 1.下载Web Agent 打开链接:https://console.gridg ...

  5. struts2整合JFreechart 饼图、折线图、柱形图

    struts2整合JFreechart 饼图.折线图.柱形图 上效果图: 当然可以将数据导出图片格式存储.具体下的链接里的文件有保存成图片的操作. 因为是strust2整合JFreechart,所以s ...

  6. Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试

    如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...

  7. spring框架整合hibernate框架简单操作数据库

    1.配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...

  8. 记一次帮客户做SEO诊断:新站收录后优化一个月了,排名一直没上去

    一.网站问题 新网站建设有一个多月了,一直在优化,但是网站一直没有排名,不知道什么原因.接下来针对这个网站分析一下原因. 二.诊断分析 看一下网站的基础数据,如图: < 可以看出来网站只有一个多 ...

  9. BeautifulSoup练习第一节

    一.pip install beautilfulsoup4 二.主要使用html.parser这个python标准库 三.打印首页博客的时间.打印摘要 # coding:utf-8from bs4 i ...

  10. FileDetector-基于java开发的照片整理工具

    1. 项目背景 开发这个功能的主要原因如下: 1. 大学期间拍摄了约50G的照片,照片很多 2. 存放不规范,导致同一张照片出现在不同的文件夹内,可读性差,无法形成记忆线. 3. 重复存放过多,很多照 ...