加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex4之基于Servlet的文件上传

发布时间:2020-12-15 01:30:39 所属栏目:百科 来源:网络整理
导读:Flex4之基于Servlet的文件上传 文章分类:Flash编程 关于flex上传功能的实现依赖于FileReference类。该 类实例对象的创建有两种方法:使用var myFileReference = new FileReference(); FileReferenceList.browse()。使用browse()或者FileReference.browse()方

Flex4之基于Servlet的文件上传

文章分类:Flash编程

关于flex上传功能的实现依赖于FileReference类。该 类实例对象的创建有两种方法:使用var myFileReference = new FileReference(); FileReferenceList.browse()。使用browse()或者FileReference.browse()方法可以打开上传窗口。

下面部分资源来自互联网,一个简单的上传组件代码,包括了监听 ProgressEvent,选择的selectEvent和完成的completeEvent。为了避免硬编码,将urlRequest路径配置在一个 xml里面,使用了httpservice进行请求,将结果用于UrlRequest的参数。这个HttpService采用了 resultFormat="e4x",那么要求返回来值为XML类型的

?

Flex上传需要两个包apache common fileupload.jar和apache common io.jar
下载地址
http://jakarta.apache.org/commons/fileupload/

http://commons.apache.org/io/download_io.cgi

?

upload.mxml

Xml代码 ?

收藏代码

  1. < span ? style = "font-size:?medium;" > <? xml ? version = "1.0" ? encoding = "utf-8" ?> ??
  2. < s:Application ? xmlns:fx = "http://ns.adobe.com/mxml/2009" ???
  3. ???????????????xmlns:s = "library://ns.adobe.com/flex/spark" ???
  4. ???????????????xmlns:mx = "library://ns.adobe.com/flex/mx" ? minWidth = "955" ? minHeight = "600" ??
  5. ???????????????creationComplete = "init()" > ??
  6. ??
  7. ????< fx:Declarations > ??
  8. ????????<!--?将非可视元素(例如服务、值对象)放在此处?--> ??
  9. ????????< mx:HTTPService ? id = "httpService" ? resultFormat = "e4x" /> ?????
  10. ????</ fx:Declarations > ??
  11. ??????
  12. ????< fx:Script > ??
  13. ????????<![CDATA[ ?
  14. ????????????import?mx.rpc.events.FaultEvent;??? ?
  15. ????????????import?mx.rpc.events.ResultEvent;??? ?
  16. ????????????import?flash.net.FileReference;??? ?
  17. ????????????import?mx.controls.Alert;??? ?
  18. ????????????import?mx.events.CloseEvent;??? ?
  19. ????????????import?flash.events.*;??? ?
  20. ???????????? ?
  21. ????????????private?var?file:FileReference;??? ?
  22. ???????????? ?
  23. ????????????private?var?filePath:String="";??? ?
  24. ????????????private?function?init():void?? ?
  25. ????????????{??? ?
  26. ????????????????Security.allowDomain("*");??? ?
  27. ????????????????file=new?FileReference();??? ?
  28. ????????????????file.addEventListener(ProgressEvent.PROGRESS,?onProgress);??? ?
  29. ????????????????file.addEventListener(Event.SELECT,?onSelect);??? ?
  30. ????????????????file.addEventListener(Event.COMPLETE,fileUploadCompleteHandler);??? ?
  31. ???????????????? ?
  32. ????????????????httpService.url="config.xml";??? ?
  33. ????????????????httpService.showBusyCursor=true;??? ?
  34. ????????????????httpService.send();??? ?
  35. ????????????????httpService.addEventListener(ResultEvent.RESULT,hsResultHandler);??? ?
  36. ????????????????httpService.addEventListener(FaultEvent.FAULT,hsFaultHandler);??? ?
  37. ????????????}??? ?
  38. ???????????? ?
  39. ????????????private?function?hsResultHandler(e:ResultEvent):void{??? ?
  40. ????????????????var?xml:XML=e.result?as?XML;??? ?
  41. ????????????????filePath=xml.filepath.@path;??? ?
  42. ????????????}??? ?
  43. ???????????? ?
  44. ????????????private?function?hsFaultHandler(e:FaultEvent):void{??? ?
  45. ????????????????Alert.show(e.fault.toString(),'http请求错误');??? ?
  46. ????????????}??? ?
  47. ???????????? ?
  48. ????????????private?function?fileUploadCompleteHandler(e:Event):void{??? ?
  49. ????????????????Alert.show("上传完成");??? ?
  50. ????????????????vBox.removeChild(bar);??? ?
  51. ????????????}??? ?
  52. ???????????? ?
  53. ????????????private?function?upload():void?? ?
  54. ????????????{??? ?
  55. ????????????????var?imageTypes:FileFilter=new?FileFilter("Images?(*.jpg,?*.jpeg,?*.png)",?"*.jpg;*.jpeg;*.png");??? ?
  56. ????????????????var?docFilter:FileFilter?=?new?FileFilter("Documents",?"*.pdf;*.doc;*.txt"); ?
  57. ????????????????//var?viewFilter:FileFilter?=?new?FileFilter("Views",?"*.avi;*.flv;*.rmvb"); ?
  58. ????????????????var?allTypes:Array=new?Array(imageTypes,docFilter);??? ?
  59. ????????????????//??????????????file.browse(allTypes);??? ?
  60. ????????????????file.browse();??? ?
  61. ????????????}??? ?
  62. ???????????? ?
  63. ????????????private?function?onSelect(e:Event):void?? ?
  64. ????????????{??? ?
  65. ????????????????Alert.show(" 上传?"?+?file.name?+?"?(共?"?+?Math.round(file.size)?+?"?字节)?",?"确认上 传",?Alert.YES?|?Alert.NO,?null,?proceedWithUpload);??? ?
  66. ????????????}??? ?
  67. ???????????? ?
  68. ????????????private?function?onProgress(e:ProgressEvent):void?? ?
  69. ????????????{??? ?
  70. ????????????????lbProgress.text="?已上传?"?+?e.bytesLoaded?+?"?字节,共?"?+?e.bytesTotal?+?"?字节";??? ?
  71. ????????????????var?proc:uint=e.bytesLoaded?/?e.bytesTotal?*?100;??? ?
  72. ????????????????bar.setProgress(proc,?100);??? ?
  73. ????????????????bar.label="当前进度:?"?+?"?"?+?proc?+?"%";??? ?
  74. ????????????}??? ?
  75. ???????????? ?
  76. ????????????private?function?proceedWithUpload(e:CloseEvent):void?? ?
  77. ????????????{??? ?
  78. ????????????????if?(e.detail?==?Alert.YES)??? ?
  79. ????????????????{??? ?
  80. ????????????????????var?request:URLRequest=new?URLRequest(filePath);??? ?
  81. ????????????????????try?? ?
  82. ????????????????????{??? ?
  83. ????????????????????????file.upload(request);??? ?
  84. ????????????????????}??? ?
  85. ????????????????????catch?(error:Error)??? ?
  86. ????????????????????{??? ?
  87. ????????????????????????trace("上传失败");??? ?
  88. ????????????????????}??? ?
  89. ???????????????????? ?
  90. ????????????????}??? ?
  91. ????????????}??? ?
  92. ???????????? ?
  93. ???????????? ?
  94. ????????]]> ??
  95. ????</ fx:Script > ??
  96. ??
  97. ??????
  98. ????< mx:Canvas ? width = "100%" ????
  99. ???????????????height = "100%" ????
  100. ???????????????x = "10" ????
  101. ???????????????y = "170" ????
  102. ???????????????fontSize = "15" > ?????
  103. ????????< mx:VBox ? width = "100%" ????
  104. ?????????????????horizontalAlign = "center" ? id = "vBox" > ?????
  105. ????????????< mx:Label ? id = "lbProgress" ????
  106. ??????????????????????text = "上传" /> ?????
  107. ????????????< mx:ProgressBar ? id = "bar" ????
  108. ????????????????????????????labelPlacement = "bottom" ????
  109. ????????????????????????????minimum = "0" ????
  110. ????????????????????????????visible = "true" ????
  111. ????????????????????????????maximum = "100" ????
  112. ????????????????????????????label = "当前进度:?0%" ????
  113. ????????????????????????????direction = "right" ????
  114. ????????????????????????????mode = "manual" ????
  115. ????????????????????????????width = "200" /> ?????
  116. ??????????????
  117. ????????????< mx:Button ? label = "上传文件" ????
  118. ???????????????????????click = "upload();" /> ?????
  119. ????????</ mx:VBox > ?????
  120. ????</ mx:Canvas > ?????
  121. ??
  122. ??????
  123. </ s:Application > ??
  124. </ span > ??

?

config.xml

??

Xml代码 ?

收藏代码

  1. < span ? style = "font-size:?medium;" > <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ????
  2. < fileUploadPath > ????
  3. ????< filepath ? id = "filepathConfig" ? path = "http://localhost:8080/FileUpload/upload.do" /> ????
  4. </ fileUploadPath > ? </ span > ??

?

?

UploadServlet

?

??

Java代码 ?

收藏代码

  1. <span?style= "font-size:?medium;" > package ?com.test.upload;??
  2. ??
  3. import ?java.io.File;??
  4. import ?java.io.IOException;??
  5. import ?java.io.PrintWriter;??
  6. import ?java.util.Iterator;??
  7. import ?java.util.List;??
  8. ??
  9. import ?javax.servlet.ServletException;??
  10. import ?javax.servlet.http.HttpServlet;??
  11. import ?javax.servlet.http.HttpServletRequest;??
  12. import ?javax.servlet.http.HttpServletResponse;??
  13. ??
  14. import ?org.apache.commons.fileupload.FileItem;??
  15. import ?org.apache.commons.fileupload.FileUploadException;??
  16. import ?org.apache.commons.fileupload.disk.DiskFileItemFactory;??
  17. import ?org.apache.commons.fileupload.servlet.ServletFileUpload;??
  18. ??
  19. public ? class ?FileUploadServlet? extends ?HttpServlet?{??
  20. ????//?定义文件的上传路径 ??
  21. ????private ?String?uploadPath?=? "c://" ;??
  22. ????//?限制文件的上传大小 ??
  23. ????private ? int ?maxPostSize?=? 10000000 ?*? 1024 ?*? 1024 ;??
  24. ??
  25. ????protected ? void ?processRequest(HttpServletRequest?request,??
  26. ????????????HttpServletResponse?response)?throws ?ServletException,?IOException?{??
  27. ????????System.out.println("Access?!" );??
  28. ????????System.out.println(uploadPath);??
  29. ????????//?防止中文乱码 ??
  30. ????????request.setCharacterEncoding("utf-8" );??
  31. ????????response.setContentType("text/html;charset=UTF-8" );??
  32. ????????PrintWriter?out?=?response.getWriter();??
  33. ????????//?保存文件到服务器中 ??
  34. ????????DiskFileItemFactory?factory?=?new ?DiskFileItemFactory();??
  35. ????????factory.setSizeThreshold(4096 );??
  36. ????????ServletFileUpload?upload?=?new ?ServletFileUpload(factory);??
  37. ????????upload.setSizeMax(maxPostSize);??
  38. ????????try ?{??
  39. ????????????List?fileItems?=?upload.parseRequest(request);??
  40. ????????????Iterator?iter?=?fileItems.iterator();??
  41. ????????????while ?(iter.hasNext())?{??
  42. ????????????????FileItem?item?=?(FileItem)?iter.next();??
  43. ????????????????if ?(!item.isFormField())?{??
  44. ????????????????????String?name?=?item.getName();??
  45. ????????????????????System.out.println(name);??
  46. ????????????????????try ?{??
  47. ????????????????????????item.write(new ?File(uploadPath?+?name));??
  48. ????????????????????????//?SaveFile?s?=?new?SaveFile(); ??
  49. ??
  50. ????????????????????????//?s.saveFile(name); ??
  51. ??
  52. ????????????????????}?catch ?(Exception?e)?{??
  53. ????????????????????????e.printStackTrace();??
  54. ????????????????????}??
  55. ????????????????}??
  56. ????????????}??
  57. ????????}?catch ?(FileUploadException?e)?{??
  58. ????????????e.printStackTrace();??
  59. ????????????System.out.println(e.getMessage()?+?"结束" );??
  60. ????????}??
  61. ????}??
  62. ??
  63. ????protected ? void ?doGet(HttpServletRequest?request,?IOException?{??
  64. ????????this .doPost(request,?response);??
  65. ????}??
  66. ??
  67. ????protected ? void ?doPost(HttpServletRequest?request,?IOException?{??
  68. ????????processRequest(request,?response);??
  69. ????}??
  70. ??
  71. }??
  72. </span>??

?

?

最后,说一下Flex的FileFilter 的用法

FileFilter 类用于指示在调用 FileReference.browse() 方法、FileReferenceList.browse() 方法或调用 File、FileReference 或 FileReferenceList 对象的 browse 方法时显示的文件浏览对话框中显示用户系统上的哪些文件。FileFilter 实例作为可选 typeFilter 参数的值传递给该方法。如果使用 FileFilter 实例,则会滤除 FileFilter 实例中未指定的扩展名和文件类型,即用户无法选择这些类型。如果未向方法传递任何 FileFilter 对象,则对话框中将显示所有文件。

可以采用以下两种方式之一使用 FileFilter 实例:

  • 仅包含 文件扩展名的描述
  • 包含 文件扩展名和 Macintosh 文件类型的描述

这两种格式不能在一个 browse 方法调用中互换。必须使用其中一种格式。

可以向 browse 方法传递一个或多个 FileFilter 实例,如下所示:

var imagesFilter:FileFilter = new FileFilter("Images","*.jpg;*.gif;*.png");
 var docFilter:FileFilter = new FileFilter("Documents","*.pdf;*.doc;*.txt");
 var myFileReference:FileReference = new FileReference();
 myFileReference.browse([imagesFilter,docFilter]);

或者在 AIR 应用程序中:

var imagesFilter:FileFilter = new FileFilter("Images","*.pdf;*.doc;*.txt");
 var myFile:File = new File();
 myFile.browseForOpen("Open",[imagesFilter,docFilter]);
var imagesFilter = new air.FileFilter("Images","*.jpg;*.gif;*.png");
 var docFilter = new air.FileFilter("Documents","*.pdf;*.doc;*.txt");
 var myFile = new air.File();
 myFile.browseForOpen("Open",docFilter]);

FileFilter.extension 属性中的扩展名列表用于筛选文件浏览对话框中显示的文件。该列表实际并不显示在对话框中;若要对用户显示文件类型,必须在描述字符串以及扩展名列表中列出文件类型。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读