最近在开发过程遇到一些小问题,是以前没怎么弄过的,过来这里记录一下:
1:flex安全沙箱问题。
问题描述:flex在flashplay9.0后增加新的功能:安全沙箱。
一般在发布服务时,flex客户端有一个默认的安全域:如:http://localhost:7001/,但如果你在服务中调用http://127.0.0.1:7001/时就会报安全沙箱冲突的错误,虽然两地址可能在本地代理中,是同一服务地址,但还是属于夸域。
解决办法,有如下几种:
1)在服务器根目录下,放入如下文件:crossdomain.xml,测试访问:http://127.0.0.1:7001/crossdomain.xml,这个对于tomcat是直接可以放入root目录,但有web服务器,可能得设置一下,如建立一个'/'的服务。这样flex客户端在跨域时,会先去查看crossdomain.xml里的相关规则。
2)手动加载crossdomain.xml:
Security.loadPolicyFile(“http://127.0.0.1:7001/gmap/crossdomain.xml”);
3)中转服务,如将跨哉操作改到jsp文件或后台服务端里进行。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd" > <cross-domain-policy> <site-control permitted-cross-domain-policies="all" /> <allow-access-from domain="*" /> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy>
2.flex的上传功能:
private function upload(): void { var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.rar;*.txt;*.jpg;*.gif;*.png;*.xls;*..xlsx;*.doc;*.docx"); fileUpLoad.addEventListener(Event.SELECT,selectedHandler); fileUpLoad.addEventListener(Event.COMPLETE,CompletedHandler); fileUpLoad.addEventListener(ProgressEvent.PROGRESS,progressHandler); fileUpLoad.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); fileUpLoad.browse([docFilter]); } private function selectedHandler(e:Event):void { fileUpLoad.removeEventListener(Event.SELECT,selectedHandler); Alert.show("上传 " + fileUpLoad.name + " (共 "+Math.round(fileUpLoad.size/1024)+"KB)?", "确认上传",Alert.YES|Alert.NO, null,proceedWithUpload); } private function proceedWithUpload(e:CloseEvent): void { if (e.detail == Alert.YES) { var request:URLRequest = new URLRequest("../fileUpload.do"); try { fileUpLoad.upload(request); this.loadbar.visible = true; } catch (error:Error) { cancelUpload(); this.loadbar.visible = false; Alert.show("上传失败","错误"); } } if(e.detail == Alert.NO){ cancelUpload(); } } private function progressHandler(e:ProgressEvent):void { lblProgress.text = " 已完成 " + e.bytesLoaded + " 字节,共 " + e.bytesTotal + " 字节"; var proc: uint = e.bytesLoaded / e.bytesTotal * 100; uploadbar.setProgress(proc, 100); uploadbar.label= "当前进度: " + " " + proc + "%"; } private function CompletedHandler(e:Event):void { var reference:FileReference=e.target as FileReference; this.loadbar.visible = false; cancelUpload(); } private function ioErrorHandler(e:IOErrorEvent):void { this.loadbar.visible = false; cancelUpload(); Alert.show(e.toString()); } <mx:ProgressBar id="uploadbar" height="80%" labelPlacement="bottom" themeColor="#F20D7A" minimum="0" visible="true" maximum="100" label="上传进度: 0%" direction="right" mode="manual" width="200"/>
CheckFileExist(uploadPath, true); private int maxPostSize = 10 * 1024 * 1024; response.setContentType("text/html; charset=UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 4); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(maxPostSize); List<?> fileItems = null; try { fileItems = upload.parseRequest(request); Iterator<?> iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); logger.info(item.toString()); if (!item.isFormField()) { String filePath = uploadPath + item.getName(); if (CheckFileExist(filePath, false)) { try { item.write(new File(filePath)); } catch (Exception ex) { logger.info(ex.getMessage()); message = "上传失败!|"+ex.getMessage(); } }else{ message = "文件已存在!"; } } } } catch (FileUploadException ex1) { logger.info("FileUploadException->" + ex1.getMessage()); message = "上传失败!|"+ex1.getMessage(); }
3.文件下载
private function downLoad():void { var downloadURL:URLRequest = new URLRequest("../fileDownload.do"); downloadURL.method=URLRequestMethod.POST; var params:URLVariables = new URLVariables; params.fileName = filename.label; downloadURL.data=params.toString(); fileDownLoad.download(downloadURL, filename.label); fileDownLoad.addEventListener(Event.COMPLETE, completeHandler); fileDownLoad.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); fileDownLoad.addEventListener(Event.CANCEL, cancelHandler); } private function cancelHandler(event:Event = null):void { fileDownLoad.removeEventListener(Event.CANCEL, cancelHandler); fileDownLoad.removeEventListener(Event.COMPLETE, completeHandler); fileDownLoad.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); } private function completeHandler(event:Event):void { cancelHandler(); Alert.show("下载成功!","提示"); } private function ioErrorHandler(e:IOErrorEvent):void { cancelHandler(); Alert.show(e.toString()); }
OutputStream out = response.getOutputStream(); InputStream in = new BufferedInputStream(new FileInputStream(uploadPath + fileName)); fileName = new String(fileName.getBytes(), "utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + ";"); int len = 0; byte[] buf = new byte[512]; try{ while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } }finally{ out.close(); in.close(); }