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

flex 文件上传与下载

发布时间:2020-12-15 04:56:32 所属栏目:百科 来源:网络整理
导读:flex 文件上传功能: 为了方便使用,所以自己根据网上一些资料自己写了一个mxml组件: upload.mxml 如图 代码: mx:Button?x= "367" ?y= "349" ???label= "浏览..." ?cornerRadius= "7" ?click= "selectFile()" /? ? ??mx:DataGrid?x= "12" ?y= "50" ?id= "dg

flex 文件上传功能:

为了方便使用,所以自己根据网上一些资料自己写了一个mxml组件:

upload.mxml

如图

代码:

 
 
  1. <mx:Button?x="367"?y="349"???label="浏览..."?cornerRadius="7"?click="selectFile()"/>? ?
  2. ??<mx:DataGrid?x="12"?y="50"?id="dg"?width="587"?height="291"??dataProvider="{selectedFiles}">? ?
  3. ????<mx:columns>? ?
  4. ??????<mx:DataGridColumn?headerText="文件名"?dataField="FILENAME"?width="250"/>? ?
  5. ??????<mx:DataGridColumn?headerText="大小(KB)"?dataField="FILESIZE"?width="100"/>? ?
  6. ??????<mx:DataGridColumn?headerText="类型"?dataField="FILETYPE"?width="70"/>? ?
  7. ??????<mx:DataGridColumn?headerText="上传状态"?dataField=""????width="200">? ?
  8. ????????<mx:itemRenderer>? ?
  9. ??????????<mx:Component>? ?
  10. ????????????<mx:HBox?width="130"?paddingLeft="2"?horizontalGap="2"?horizontalScrollPolicy="off"?verticalScrollPolicy="off">? ?
  11. ??????????????<mx:Script>? ?
  12. ????????????????<![CDATA[? ?
  13. ??????????????????override?public?function?set?data(value:Object):void{? ?
  14. ????????????????????super.data?=?value;? ?
  15. ????????????????????progress.setProgress(0,data.fileRefrence.size); ?
  16. ????????????????????data.fileRefrence.addEventListener(ProgressEvent.PROGRESS,progressHandler);? ?
  17. ????????????????????data.fileRefrence.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fini); ?
  18. ????????????????????data.fileRefrence.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); ?
  19. ????????????????????data.fileRefrence.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError); ?
  20. ??????????????????}? ?
  21. ???????????????????? ?
  22. ??????????????????private?function?progressHandler(event:ProgressEvent):void{? ?
  23. ????????????????????progress.setProgress(event.bytesLoaded,data.fileRefrence.size);? ?
  24. ????????????????????progress.label="已上传:"+Math.round((event.bytesLoaded?*?100?/data.fileRefrence.size))+"%"; ?
  25. ??????????????????}???? ?
  26. ??????????????????private?function?ioErrorHandler(event:IOErrorEvent):void{ ?
  27. ????????????????????outerDocument.lbl_error.text=event.text; ?
  28. ????????????????????data.fileRefrence.removeEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); ?
  29. ??????????????????} ?
  30. ??????????????????private?function?securityError(event:SecurityError):void{ ?
  31. ????????????????????outerDocument.lbl_error.text=event.message.toString(); ?
  32. ????????????????????data.fileRefrence.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError); ?
  33. ??????????????????} ?
  34. ???????????????????? ?
  35. ??????????????????public?function?fini(event:?DataEvent):void{ ?
  36. ???????????????????var?retXml:XML=XML(event.data); ?
  37. ???????????????????var?retCode:int=int(retXml.retCode); ?
  38. ???????????????????var?retMsg:String=retXml.retMsg; ?
  39. ???????????????????var?serverDir:String=retXml.serverDir; ?
  40. ???????????????????if(retCode==1){ ?
  41. ????????????????????data.STATUS=1;? ?
  42. ????????????????????data.FILEPATH=serverDir+outerDocument.relativePath+"/"; ?
  43. ????????????????????data.UPLOADDATE=outerDocument.df.format(new?Date()); ?
  44. ????????????????????outerDocument.objMain.upLoadSucessFiles.addItem(data); ?
  45. ?????????????????????progress.label="完成";? ?
  46. ????????????????????} ?
  47. ????????????????????else{ ?
  48. ?????????????????????outerDocument.lbl_error.text=retMsg; ?
  49. ????????????????????} ?
  50. ????????????????????//移除监听 ?
  51. ????????????????????data.fileRefrence.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fini);? ?
  52. ????????????????????data.fileRefrence.removeEventListener(ProgressEvent.PROGRESS,progressHandler); ?
  53. ????????????????????//保存到数据库 ?
  54. ????????????????????outerDocument.doSave(); ?
  55. ??????????????????}? ?
  56. ????????????????]]>? ?
  57. ??????????????</mx:Script>? ?
  58. ??????????????<mx:ProgressBar?id="progress"?width="80%"???? ?
  59. ??????????????????????minimum="0"?maximum="{data.fileRefrence.size}"??mode="manual"? ?
  60. ??????????????????????labelPlacement="center"?label="{data.READYWORD}"> ?
  61. ??????????????</mx:ProgressBar>? ?
  62. ??????????????<!--?取消按钮-->? ?
  63. ??????????????<mx:LinkButton?id="btncancel"?width="20"?toolTip="取消上传"?click="cancel()"? ?
  64. ??????????????label="取消"?icon="@Embed('style/assets/icons/cancel.png')">? ?
  65. ??????????????<mx:Script>? ?
  66. ??????????????<![CDATA[? ?
  67. ??????????????private?function?cancel():void{? ?
  68. ??????????????data.fileRefrence.cancel();? ?
  69. ??????????????progress.label?=?"已取消";? ?
  70. ??????????????outerDocument.doSave(); ?
  71. ??????????????}? ?
  72. ??????????????]]>? ?
  73. ??????????????</mx:Script>? ?
  74. ??????????????</mx:LinkButton>? ?
  75. ??????????????<!--?删除按钮--> ?
  76. ??????????????<mx:LinkButton?width="20"?click="deleteItem(event)"??toolTip="从列表中删除"?icon="@Embed('style/assets/icons/delete.png')">? ?
  77. ????????????????<mx:Script>? ?
  78. ??????????????????<![CDATA[? ?
  79. ????????????????????import?mx.collections.ArrayCollection;? ?
  80. ????????????????????? ?
  81. ????????????????????private?function?deleteItem(event:MouseEvent):void?{? ?
  82. ?????????????????????var?dg:Object?=?event.target.parent.outerDocument.dg; ?
  83. ????????????var?dp:ArrayCollection?=?ArrayCollection(dg.dataProvider); ?
  84. ????????????var?index:int?=?dp.getItemIndex(data); ?
  85. ????????????dp.removeItemAt(index);? ?
  86. ????????????ArrayCollection(dg.dataProvider).refresh(); ?
  87. ?
  88. ????????????????????}? ?
  89. ??????????????????]]>? ?
  90. ????????????????</mx:Script>? ?
  91. ??????????????</mx:LinkButton>? ?
  92. ????????????</mx:HBox>? ?
  93. ??????????</mx:Component>? ?
  94. ????????</mx:itemRenderer>? ?
  95. ??????</mx:DataGridColumn>? ?
  96. ????</mx:columns>? ?
  97. ??</mx:DataGrid>? ?
  98. ??<mx:Label?id="lbl_bytes"?width="495"?color="red"?x="28"?y="10"?text="文件数为:{this.selectedFiles.length},总大小为:{(this.fileListSize/(1024*1024)).toFixed(2)}MB"/> ?
  99. ??<mx:Label?id="lbl_error"?width="567"?color="red"?x="10"?y="381"?text=""/> ?
  100. ??<mx:Button?x="448"?y="349"?label="上传"?cornerRadius="7"?id="btn_upload"?enabled="{this.selectedFiles.length>0}"?click="checkFileExist();"?/>? ?
  101. ??<mx:Button?x="527"?y="349"?label="关闭"?cornerRadius="7"?click="closeWin();"?/>? ?
  102. ?
  103. ??/**? ?
  104. ????????*?上传一个文件,监听文件上传完成事件,递归调用.? ?
  105. ????????*/? ?
  106. ??????private?function?doSingleUploadFile():void{? ?
  107. ??????????if?(fileList.fileList.length?>?0){? ?
  108. ????????????var?f:?FileReference?=?fileList.fileList.shift()?as?FileReference;? ?
  109. ????????????f.addEventListener(Event.COMPLETE,?doSingleUploadFileComplete);? ?
  110. ????????????f.upload(new?URLRequest(urlRequest));? ?
  111. ??????????} ?
  112. ??????}? ?
  113. ??????/**? ?
  114. ????????*?一个文件上传完成事件的处理函数,递归执行上传下一个文件.? ?
  115. ????????*/? ?
  116. ??????private?function?doSingleUploadFileComplete(event:?Event):void{? ?
  117. ????????var?file:?FileReference?=?event.target?as?FileReference;? ?
  118. ????????file.removeEventListener(Event.COMPLETE,?doSingleUploadFileComplete); ?
  119. ????????doSingleUploadFile(); ?
  120. ??????}? ?

涉及到的JAVA类有:

FileUploadAction.java//文件上传类

?

 
 
  1. import?java.io.File; ?
  2. import?java.io.IOException; ?
  3. import?java.io.PrintWriter; ?
  4. import?java.util.Iterator; ?
  5. import?java.util.List; ?
  6. ?
  7. import?javax.servlet.ServletException; ?
  8. import?javax.servlet.http.HttpServlet; ?
  9. import?javax.servlet.http.HttpServletRequest; ?
  10. import?javax.servlet.http.HttpServletResponse; ?
  11. ?
  12. import?org.apache.commons.fileupload.FileItem; ?
  13. import?org.apache.commons.fileupload.FileUploadException; ?
  14. import?org.apache.commons.fileupload.disk.DiskFileItemFactory; ?
  15. import?org.apache.commons.fileupload.servlet.ServletFileUpload; ?
  16. ?
  17. import?org.apache.struts.action.ActionForm; ?
  18. import?org.apache.struts.action.ActionForward; ?
  19. import?org.apache.struts.action.ActionMapping; ?
  20. import?org.apache.struts.actions.DispatchAction; ?
  21. ?
  22. import?com.tydic.osgi.org.springframework.commons.SystemProperties; ?
  23. ?
  24. public?class?FileUploadAction?extends?HttpServlet?{ ?
  25. ?
  26. ?//?定义文件的上传路径 ?
  27. ?
  28. ?private?String?uploadPath?=?"d:a"; ?
  29. ?
  30. ?//?限制文件的上传大小 ?
  31. ?
  32. ?private?int?maxPostSize?=?100?*?1024?*?1024; ?
  33. ?
  34. ?public?FileUploadAction()?{ ?
  35. ??super(); ?
  36. ?} ?
  37. ?public?void?destory(){ ?
  38. ??super.destroy(); ?
  39. ?} ?
  40. ? ?
  41. ?protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response) ?
  42. ????throws?ServletException,?IOException?{ ?
  43. ??doupload(request,?response); ?
  44. ?} ?
  45. ? ?
  46. ?protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response) ?
  47. ?????throws?ServletException,?IOException?{ ?
  48. ??doupload(request,?response); ?
  49. ?} ?
  50. ?private?String?getClassSavePath(){ ?
  51. ??String?SavePath=getClass().getClassLoader().getResource("/").getPath()+"../../"; ?
  52. ??//String?path_name?=?SystemProperties.getProperty("UPLOAD_PATH"); ?
  53. ??return?SavePath; ?
  54. ?} ?
  55. ?private?String?getServerPath(){ ?
  56. ??String?SavePath=getClass().getClassLoader().getResource("/").getPath()+"../../"; ?
  57. ??SavePath=SavePath.substring(0,SavePath.indexOf("BMP")+4); ?
  58. ??//String?path_name?=?SystemProperties.getProperty("UPLOAD_PATH"); ?
  59. ??return?SavePath; ?
  60. ?} ?
  61. ?
  62. ?public?void?doupload(HttpServletRequest?request,?HttpServletResponse?response) ?
  63. ???throws?ServletException,?IOException?{ ?
  64. ??response.setContentType("text/html;charset=UTF-8"); ?
  65. ?? ?
  66. ??System.out.println("Access?!"); ?
  67. ????????response.setContentType("text/html;charset=UTF-8"); ?
  68. ????????request.setCharacterEncoding("utf-8"); ?
  69. ????????uploadPath?=?request.getParameter("txtFilePath"); ?
  70. ????????if("".equals(uploadPath)||null==uploadPath){ ?
  71. ?????????response ?
  72. ???.getWriter() ?
  73. ???.print( ?
  74. ?????"<?xml?version="1.0"?encoding="utf-8"?><retInfo><retCode>0</retCode><retMsg>上传路径为空</retMsg></retInfo>"); ?
  75. ????????}else{ ?
  76. ?????????String?retInfo="上传OK!"; ?
  77. ?????????String?retCode="1"; ?
  78. ?????????String?fileName?=?request.getParameter("fileName"); ?
  79. ?????????String?strDir=getClassSavePath()+uploadPath; ?
  80. ?????????String?serverDir=getServerPath(); ?
  81. ????????????//保存文件到服务器中 ?
  82. ????????????DiskFileItemFactory?factory?=?new?DiskFileItemFactory(); ?
  83. ????????????factory.setSizeThreshold(4096); ?
  84. ????????????ServletFileUpload?upload?=?new?ServletFileUpload(factory); ?
  85. ????????????upload.setSizeMax(maxPostSize); ?
  86. ????????????try?{ ?
  87. ????????????????List?fileItems?=?upload.parseRequest(request); ?
  88. ????????????????Iterator?iter?=?fileItems.iterator(); ?
  89. ????????????????while?(iter.hasNext())?{ ?
  90. ?????????????????FileItem?item?=?(FileItem)?iter.next(); ?
  91. ????????????????????if?(!item.isFormField())?{ ?
  92. ????????????????????????String?name?=?item.getName(); ?
  93. ????????????????????????if(!("".equals(fileName))&&null!=fileName){ ?
  94. ?????????????????????????name?=?fileName; ?
  95. ????????????????????????} ?
  96. ????????????????????????try?{ ?
  97. ?????????????????????????File?dir=new?File(strDir); ?
  98. ?????????????????????????if(!dir.exists()||!dir.isDirectory()) ?
  99. ?????????????????????????{ ?
  100. ??????????????????????????dir.mkdir(); ?
  101. ?????????????????????????} ?
  102. ????????????????????????????item.write(new?File(strDir+"/"?+?name));//写入文件 ?
  103. ???????????????????????????? ?
  104. ????????????????????????}?catch?(Exception?e)?{ ?
  105. ????????????????????????????e.printStackTrace(); ?
  106. ????????????????????????????retCode="0"; ?
  107. ????????????????????????????retInfo=e.getMessage(); ?
  108. ????????????????????????????throw?new?IOException("文件上传失败"); ?
  109. ????????????????????????} ?
  110. ????????????????????} ?
  111. ????????????????} ?
  112. ????????????}?catch?(FileUploadException?e)?{ ?
  113. ????????????????retCode="0"; ?
  114. ????????????????retInfo=e.getMessage(); ?
  115. ????????????????e.printStackTrace(); ?
  116. ????????????????System.out.println(e.getMessage()?+?"结束"); ?
  117. ????????????} ?
  118. ????????????response ?
  119. ??????.getWriter() ?
  120. ??????.print( ?
  121. ????????"<?xml?version="1.0"?encoding="utf-8"?><retInfo><retCode>"+retCode+"</retCode><retMsg>"+retInfo+"</retMsg><serverDir>"+serverDir+"</serverDir></retInfo>"); ?
  122. ????????} ?
  123. ?? ?
  124. ?} ?
  125. } ?

文件下载有两种方式:

?

 
 
  1. <mx:DataGrid??height="99%"?width="99%"?dataProvider="{dgResult}">?? ?
  2. ???<mx:columns>?
  3. ???????<mx:DataGridColumn?headerText="文件名"?dataField="FILE_NAME"?width="200"?/>?
  4. ???????<mx:DataGridColumn?headerText="大小(KB)"?dataField="FILE_SIZE"?width="70"?/>?
  5. ???????<mx:DataGridColumn?headerText="上传时间"?dataField="STATE_DATE"?width="120"/>?? ?
  6. ???????<mx:DataGridColumn?headerText="操作"?width="80">?
  7. ????????<mx:itemRenderer>?
  8. ?????????<mx:Component>?
  9. ??????????<mx:LinkButton?label="下载"?icon="{outerDocument.attachIcon}"?click="outerDocument.downloadAttach(data)"/>?
  10. ?????????</mx:Component>?
  11. ????????</mx:itemRenderer>?
  12. ???????</mx:DataGridColumn>???? ?
  13. ???</mx:columns>??????????? ?
  14. ??</mx:DataGrid>? ?
  15. ?
  16. private?var?fileRef:FileReference; ?
  17. ?
  18. ??public?function?downloadAttach(item:Object):void{ ?
  19. ???//var?str:String=item.FILE_PATH; ?
  20. ??? ?
  21. ???//方法一:弹出新容器用java类返回 ?
  22. ???//var?url:String=serverUrl+downloadAction+"?relPath="+str.substr(0,str.indexOf("/"))+"&filename="+item.FILE_NAME; ?
  23. ???//navigateToURL(new?URLRequest(url),?"_blank"); ?
  24. ??? ?
  25. ???//方法二:用filerefernce ?
  26. ???var?urlReq:String=serverUrl+item.FILE_PATH; ?
  27. ???fileRef.download(new?URLRequest(urlReq)); ?
  28. ??} ?
  29. ??private?function?initFile():void{ ?
  30. ???fileRef?=?new?FileReference(); ?
  31. ?????????fileRef.addEventListener(Event.CANCEL,?doEvent); ?
  32. ?????????fileRef.addEventListener(Event.COMPLETE,?completeHandler); ?
  33. ?????????fileRef.addEventListener(Event.OPEN,?doEvent); ?
  34. ?????????fileRef.addEventListener(Event.SELECT,?doEvent); ?
  35. ?????????fileRef.addEventListener(HTTPStatusEvent.HTTP_STATUS,?doEvent); ?
  36. ?????????fileRef.addEventListener(IOErrorEvent.IO_ERROR,?ioErrorHandler); ?
  37. ?????????fileRef.addEventListener(ProgressEvent.PROGRESS,?processEvent); ?
  38. ?????????fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR,?doEvent); ?
  39. ??} ?
  40. ??private?function?doEvent(evt:Event):void?{ ?
  41. ????????//?取得当前FileReference的引用 ?
  42. ????????var?fr:FileReference?=?evt.currentTarget?as?FileReference; ?
  43. ????????trace("evt?Type:"+evt.type+"evt"+evt.toString()); ?
  44. ???????} ?
  45. ???????private?function?processEvent(event:ProgressEvent):void{ ?
  46. ????????dl_cancel.visible=true; ?
  47. ????????mydlBar.maximum=event.bytesTotal; ?
  48. ????????mydlBar.setProgress(event.bytesLoaded,event.bytesTotal);? ?
  49. ???????????mydlBar.label="已下载:"+Math.round((event.bytesLoaded?*?100?/event.bytesTotal))+"%"; ?
  50. ???????} ?
  51. ???????private?function?cancelHandler():void{ ?
  52. ????????this.fileRef.cancel(); ?
  53. ????????dl_cancel.visible=false; ?
  54. ???????} ?
  55. ???????private?function?completeHandler(event:Event):void{ ?
  56. ????????mydlBar.label="已完成"; ?
  57. ????????dl_cancel.visible=false; ?
  58. ???????} ?
  59. ???????private?function?ioErrorHandler(event:IOErrorEvent):void{ ?
  60. ?????????Alert.show(event.text); ?
  61. ???????} ?

文件下载的java类:

?

 
 
  1. FileDownloadAction.java?//文件下载类 ?
  2. ?
  3. import?java.io.BufferedInputStream; ?
  4. import?java.io.BufferedOutputStream; ?
  5. import?java.io.FileInputStream; ?
  6. import?java.io.IOException; ?
  7. ?
  8. import?javax.servlet.ServletException; ?
  9. import?javax.servlet.http.HttpServlet; ?
  10. import?javax.servlet.http.HttpServletRequest; ?
  11. import?javax.servlet.http.HttpServletResponse; ?
  12. ?
  13. public?class?FileDownloadAction?extends?HttpServlet?{ ?
  14. ?private?static?final?long?serialVersionUID?=?1L; ?
  15. ?
  16. ?protected?void?doPost(HttpServletRequest?request,?
  17. ???HttpServletResponse?response)?throws?ServletException,?IOException?{ ?
  18. ??String?fileName?=?""; ?
  19. ??String?relativePath=""; ?
  20. ??if?(null?!=?request.getParameter("filename"))?{ ?
  21. ???fileName?=?request.getParameter("filename"); ?
  22. ??} ?
  23. ??if?(null?!=?request.getParameter("relPath"))?{ ?
  24. ???relativePath=request.getParameter("relPath"); ?
  25. ??} ?
  26. ??response.setContentType("application/x-msdownload"); ?
  27. ??response.setHeader("Content-disposition",?"attachment;filename="?
  28. ????+?fileName); ?
  29. ??if?(!"".equals(fileName)?&&?!"".equals(relativePath))?{ ?
  30. ???String?realPath=getClassSavePath()+relativePath+"/"+fileName; ?
  31. ???System.out.println("文件路径名:"+realPath); ?
  32. ???BufferedInputStream?bis?=?null; ?
  33. ???BufferedOutputStream?bos?=?null; ?
  34. ???try?{ ?
  35. ????bis?=?new?BufferedInputStream(new?FileInputStream(realPath)); ?
  36. ????bos?=?new?BufferedOutputStream(response.getOutputStream()); ?
  37. ????byte[]?buff?=?new?byte[1024]; ?
  38. ????int?bytesRead; ?
  39. ????while?(-1?!=?(bytesRead?=?bis.read(buff,?0,?buff.length)))?{ ?
  40. ?????bos.write(buff,?bytesRead); ?
  41. ????} ?
  42. ???}?finally?{ ?
  43. ????if?(null?!=?bis) ?
  44. ?????bis.close(); ?
  45. ????if?(null?!=?bos) ?
  46. ?????bos.close(); ?
  47. ???} ?
  48. ??} ?
  49. ?
  50. ?} ?
  51. ?private?String?getClassSavePath(){ ?
  52. ??String?SavePath=getClass().getClassLoader().getResource("/").getPath()+"../../"; ?
  53. ??return?SavePath; ?
  54. ?} ?
  55. ?protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp) ?
  56. ???throws?ServletException,?IOException?{ ?
  57. ??doPost(req,?resp); ?
  58. ?} ?
  59. ?
  60. } ?

(编辑:李大同)

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

    推荐文章
      热点阅读