[置顶] flex的AIR处女作-QQ聊天记录拷贝另存服务器
<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="800" height="600" creationComplete="callLater(init)"> <fx:Script> <![CDATA[ import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.factory.StringTextLineFactory; import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; var content:String=""; var newcontent:String=""; var imgcount:int=0; var imgreplace:int=0; private function init():void{ } protected function richeditabletext1_pasteHandler(event:Event):void { var a:* = Clipboard.generalClipboard.getData(ClipboardFormats.HTML_FORMAT); //从系统剪切板中读取是html格式的数据 if(a!=null){ var stra:String= a as String; content=content as String; var myPattern:RegExp =/file:\/\/\//gi; stra=stra.replace(myPattern, ""); content=content+stra; a=content as Object; abc.textFlow = TextConverter.importToFlow(a, TextConverter.TEXT_FIELD_HTML_FORMAT); } } protected function button1_clickHandler(event:MouseEvent):void { if(abc.text==""){ Alert.show("输入不能为空"); return ; } var flexreg:RegExp=/<IMG/gi; if(content.search(flexreg)<0){//说明提交的内容没有图片,那么就直接提交 var params:Object = {}; params["content"]=abc.text; service.send(params); return; } //把content中的img的标签替换掉,替换成{图片发送上去,服务器返回给客户端的一个地址} while(content.search(flexreg)>=0){ imgcount++;//图片数量加一 var start:int=content.search(flexreg); newcontent=newcontent+content.substring(0,start);//newcontent信息取到标签之前 content=content.substring(start,content.length);//content字符串去掉<IMG之前的字符 var intsrc:int=content.indexOf("src"); newcontent=newcontent+content.substring(0,intsrc);//把src属性之前的字符取到,可能有width之类的 content=content.substring(intsrc,content.length); var intone:int=content.indexOf('"'); newcontent=newcontent+content.substring(0,intone+1);//把第一个引号字符取到,可能有width之类的 newcontent=newcontent+"{"+imgcount+"}"; content=content.substring(intone+1,content.length); var inttwo:int=content.indexOf('"'); var strsrc:String=content.substring(0,inttwo);//图片的地址 content=content.substring(inttwo,content.length);//原先字符串去掉路径 //向newcontent中添加返回的绝对路径 var file:File = new File(strsrc); if(file.exists){ file.upload(new URLRequest("http://localhost:8080/WallpaperShowShow/terminal/serve_uploadImg?imgcount="+imgcount),"file"); file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadComplete); file.addEventListener(IOErrorEvent.IO_ERROR,onIoError); } } //要把最后一个img标签后面的字符加入进去 newcontent=newcontent+content; } protected function uploadComplete(event:DataEvent):void{ var obj:Object=JSON.parse(event.data) var state:String=obj.state as String; if(state == "0"){ Alert.show("图片上传失败"); return ; } var strs:Array=state.split("&"); newcontent=newcontent.replace("{"+strs[1]+"}",strs[0]); imgreplace++; if(imgcount==imgreplace){ trace(newcontent); var params:Object = {}; params["content"]=newcontent; service.send(params); } } protected function onIoError(event:IOErrorEvent):void{ Alert.show("图片上传失败"); } //调用失败 protected function service_faultHandler(event:FaultEvent):void { Alert.show("失败了","提示"); } protected function service_resultHandler(event:ResultEvent):void { Alert.show("成功了","提示"); abc.text=""; } ]]> </fx:Script> <fx:Declarations> <s:HTTPService id="service" url="http://localhost:8080/WallpaperShowShow/terminal/serve_addServeRecord" useProxy="false" method="POST" fault="service_faultHandler(event)" result="service_resultHandler(event)" resultFormat="text"> </s:HTTPService> </fx:Declarations> <s:HGroup verticalAlign="baseline" top="30" left="80"> <s:Label fontSize="14" text="客服:"/> <s:TextInput /> </s:HGroup> <s:VGroup horizontalCenter="0" verticalCenter="0"> <s:HGroup verticalAlign="baseline"> <s:Label backgroundColor="#FFFFFF" fontFamily="Arial" fontSize="14" text="内容:"/> <s:Group> <s:Rect width="600" height="450"> <s:stroke> <s:SolidColorStroke color="0x0"/> </s:stroke> </s:Rect> <s:RichEditableText id="abc" x="0" y="0" width="600" height="450" text="RichEditableText" paste="richeditabletext1_pasteHandler(event)"> <s:span></s:span> </s:RichEditableText> </s:Group> </s:HGroup> </s:VGroup> <s:Button x="473" y="31" label="提交" id="btn" click="button1_clickHandler(event)"/> </s:WindowedApplication>
服务器端的代码
/** * 图片上传到服务器 * @return */ public String uploadImg(){ try { HttpServletRequest request = ServletActionContext.getRequest(); String uploadPath = request.getSession().getServletContext().getRealPath("/uploadimg"); FileInputStream fis=new FileInputStream(file); //对name进行处理 String str= new SimpleDateFormat("yyyyMMddhhmmss").format(new Date())+(int)(Math.random()*1000); fileFileName=str+fileFileName.substring(fileFileName.lastIndexOf("."), fileFileName.length()); File f=new File(uploadPath+"/" + fileFileName); if(!f.exists()){ f.createNewFile(); } FileOutputStream fos=new FileOutputStream(f); byte[] b = new byte[1024]; int len = 0; while(true){ len = fis.read(b); if(len<0)break; fos.write(b, 0, len); } fos.close(); fis.close(); state="http://localhost:8080/WallpaperShowShow/uploadimg/"+fileFileName+"&"+imgcount; } catch (Exception e) { e.printStackTrace(); logger.error("UploadImgAction.uploadImg!", e); state = "0"; return ERROR; } return SUCCESS; } /** * 把上传的字符串写入数据库 * @return */ public String addServeRecord(){ //写入数据库 return SUCCESS; }
这个不仅把你的QQ聊天记录中的信息保存起来,还可以把word中 的信息保存起来,用这个程序的前提是你在信息中的图片,不是真正就一张图片,比如,你拷贝过来的
QQ消息中有截图,其实是保存在你电脑中的一个文件夹下,拷贝过来的是路径