[置顶] 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消息中有截图,其实是保存在你电脑中的一个文件夹下,拷贝过来的是路径


 

posted @ 2013-05-23 21:46  javawebsoa  Views(210)  Comments(0Edit  收藏  举报