最近在开发过程遇到一些小问题,是以前没怎么弄过的,过来这里记录一下:
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();
}
9630

被折叠的 条评论
为什么被折叠?



