分享

flex图片上传(封装) - Java与咖啡 - JavaEye技术网站

 欢欢2008 2010-12-07

flex图片上传(封装)

文章分类:Web前端
最近项目中好多地方都用的了图片上传,为了避免写好多重复的代码,所有自己就封装了一下,在这里记录一下,

flex 端 面板

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:dateUtil="net.util.*"  
  3.                 x="500" y="200"    width="569" height="738"    creationComplete="init()" layout="absolute" fontSize="14" verticalAlign="top">   
  4.   
  5.     <mx:Panel x="69" y="10" width="433" height="527" layout="absolute" title="图片上传">   
  6.   
  7.         <mx:Label text="主标题" x="39" y="16"/>   
  8.         <mx:Label text="副标题" x="39" y="54"/>   
  9.         <mx:TextInput x="116" y="16" width="201" id="mainTitleInput" text="{mainTitle}"/>   
  10.         <mx:TextInput x="117" y="54" width="201" id="subTitleInput" text="{subTitle}"/>   
  11.         <mx:TextInput x="117" y="92" width="201" id="linkInput" text="{link}"/>   
  12.         <mx:TextInput x="118" y="128" width="201" id="picInput" text="{picName}" editable="false"/>   
  13.         <mx:Button x="178" y="445" label="保存" id="uploadButton"/>   
  14.         <mx:Label text="链接" x="53" y="94"/>   
  15.         <mx:Label text="图片" x="53" y="130"/>   
  16.         <mx:TextInput x="100" y="285" width="201" id="csmallPic" text="" visible="false"/>   
  17.   
  18.         <mx:Button label="选择图片"  
  19.   
  20.                    x="324"  
  21.                    y="130" id="small"/>   
  22.         <mx:Image id="img"  
  23.                   width="316"  
  24.                   height="253"  
  25.                   x="54"  
  26.                   y="173" httpStatus="img_httpStatus(event);" source="{contentImage}"/>   
  27.   
  28.         <mx:Script>    
  29.             <![CDATA[   
  30.                 import flash.events.*;   
  31.   
  32.                 import mx.controls.Alert;   
  33.                 import mx.managers.CursorManager;   
  34.                 import mx.managers.PopUpManager;   
  35.                    
  36.   
  37.                 private var file:FileReference;   
  38.                 private var byteArray:ByteArray;   
  39.                 private var bitmapData:BitmapData;   
  40.                 private var loader:Loader=new Loader();   
  41.   
  42.                 [Bindable]   
  43.                 public var bannerId:String;   
  44.   
  45.                 [Bindable]   
  46.                 public var cid:String;   
  47.   
  48.                 [Bindable]   
  49.                 public var mainTitle:String;   
  50.   
  51.                 [Bindable]   
  52.                 public var link:String;   
  53.   
  54.                 [Bindable]   
  55.                 public var subTitle:String;   
  56.                 [Bindable]   
  57.                 public var contentImage:String;   
  58.   
  59.                 [Bindable]   
  60.                 public var bannerTemplet:String;   
  61.                 [Bindable]   
  62.                 public var picName:String=" ";   
  63.                 public var bigName:String=new CreateImageName().getName(1);   
  64.                 public var urls:String=URLconst.uploadStartURL+bigName+URLconst.uploadEndURL;   
  65.                 public var isAdd:Boolean;   
  66.                 public var picUpload:PicUpload;   
  67.   
  68.                 private function init():void{   
  69.                     picUpload=new PicUpload(small,   
  70.                         img,   
  71.                         picInput,   
  72.                         csmallPic,   
  73.                         uploadButton,   
  74.                         urls,"uploadsfinished");   
  75.                     picUpload.addEventListener("uploadsfinished",uploadsfinished);   
  76.                 }   
  77.   
  78.                 public function uploadsfinished(event:Event):void{   
  79. //              this.dispatchEvent(new Event("saveBannerContent"));   
  80.                     Alert.show("上传完成");   
  81.                 }   
  82.   
  83.   
  84.                 //监听从远程FTP取图片是否成功   
  85.                 private function img_httpStatus(evt:HTTPStatusEvent):void {    
  86.                     switch (evt.status) {    
  87.                         case 200:    
  88.                             // Valid image, do nothing.    
  89.                             break;    
  90.                         case 404:    
  91.                             // Invalid image, PANIC!    
  92.                             Alert.show("无效图片", evt.status.toString());    
  93.                             break;    
  94.                         default:    
  95.                             Alert.show(evt.toString(), evt.status.toString());    
  96.                             break;    
  97.                     }    
  98.                 }   
  99.   
  100.             ]]>    
  101.         </mx:Script>    
  102.     </mx:Panel>   
  103.        
  104. </mx:Application>  


封装后的组件:
Java代码 复制代码
  1. package  
  2. {   
  3.     import flash.display.Bitmap;   
  4.     import flash.display.BitmapData;   
  5.     import flash.display.Loader;   
  6.     import flash.events.*;   
  7.     import flash.net.FileFilter;   
  8.     import flash.net.FileReference;   
  9.     import flash.net.URLRequest;   
  10.     import flash.system.Security;   
  11.     import flash.utils.ByteArray;   
  12.   
  13.     import mx.controls.Alert;   
  14.     import mx.controls.Button;   
  15.     import mx.controls.Image;   
  16.     import mx.controls.TextInput;   
  17.     import mx.managers.CursorManager;   
  18.   
  19.   
  20.     public class PicUpload   
  21.     {    
  22.         //Events   
  23.         public var completeEvent:Event;   
  24.   
  25.         //UI Vars   
  26.         private var _browsebutton:Button;   
  27.         private var _uploadbutton:Button;   
  28.         private var picInput:TextInput;   
  29.         private var csmallPic:TextInput;   
  30.         private var img:Image;   
  31.   
  32.         //File Reference Vars   
  33.         [Bindable]   
  34.         private var file:FileReference;   
  35.         private var request:URLRequest;   
  36.         private var byteArray:ByteArray;   
  37.         private var bitmapData:BitmapData;   
  38.         private var loader:Loader=new Loader();   
  39.         private var _maxFileSize:Number=302400//bytes   
  40.         //File Filter vars   
  41.         private var imageTypes:FileFilter = new FileFilter("Images (*.jpg; *.jpeg; *.gif; *.png)" ,"*.jpg; *.jpeg; *.gif; *.png");   
  42.         //private var videoTypes:FileFilter = new FileFilter("Flash Video Files (*.flv)","*.flv");   
  43.         //private var documentTypes:FileFilter = new FileFilter("Documents (*.pdf)",("*.pdf"));   
  44.         private var allTypes:Array = new Array(imageTypes);//,videoTypes,documentTypes);   
  45.   
  46.         //config vars   
  47.         private var _url:String;    
  48.         private var _rollBack:String="";   
  49.   
  50.   
  51.         public function PicUpload(browseButton:Button,   
  52.             imge:Image,   
  53.             disInput:TextInput,   
  54.             visInput:TextInput,   
  55.             uploadButton:Button,   
  56.             url:String,   
  57.             rollBack:String){   
  58.             _browsebutton=browseButton;   
  59.             img=imge;   
  60.             picInput=disInput;   
  61.             csmallPic=visInput;   
  62.             _uploadbutton=uploadButton;   
  63.             _url=url;   
  64.             _rollBack=rollBack;   
  65.             init();   
  66.         }   
  67.   
  68.         private function init():void{   
  69.             Security.allowDomain("*");   
  70.             file=new FileReference();   
  71.             file.addEventListener(Event.COMPLETE, fileReferenceCompleteHandler);   
  72.             file.addEventListener(Event.SELECT, fileReferenceSelectHandler);   
  73.             _browsebutton.addEventListener(MouseEvent.CLICK, choose);   
  74.             _uploadbutton.addEventListener(MouseEvent.CLICK, proceedWithUpload);   
  75.             request=new URLRequest   
  76.             request.url=_url;   
  77.         }   
  78.   
  79.         //选择上传的图片   
  80.         private function choose(event:MouseEvent):void  
  81.         {   
  82.             file.browse(allTypes);   
  83.         }   
  84.         //上传图片到服务器   
  85.         private function proceedWithUpload(event:MouseEvent):void  
  86.         {   
  87.             if(csmallPic.text!=""){   
  88.                 file.upload(request);   
  89.                 file.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);//文件失败上传监听事件    
  90.                 file.addEventListener(Event.COMPLETE,doFileUploadComplete);//文件成功上传监听事件      
  91.                 file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);   
  92.                 file.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler);   
  93.             }   
  94.         }   
  95.   
  96.         //载入本地图片   
  97.         private function fileReferenceCompleteHandler(e:Event):void  
  98.         {   
  99.             byteArray=file.data;   
  100.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);   
  101.             loader.loadBytes(byteArray);   
  102.         }   
  103.   
  104.         //图片载入完成显示在预览框中   
  105.         private function loaderCompleteHandler(e:Event):void  
  106.         {   
  107.             var bitmap:Bitmap=Bitmap(loader.content);   
  108.             bitmapData=bitmap.bitmapData;   
  109.             img.source=bitmap;   
  110.         }   
  111.   
  112.         //选择文件动作监听   
  113.         private function fileReferenceSelectHandler(e:Event):void  
  114.         {   
  115.             var msg:String ="";   
  116.             if (checkFileSize(file.size)){   
  117.                 csmallPic.text=file.name;   
  118.                 picInput.text=file.name;   
  119.                 file.load();   
  120.             }  else {   
  121.                 msg += file.name + " 大小超过限制了. \n";   
  122.                 Alert.show(msg + "图片最大允许: " + Math.round(_maxFileSize / 1024) + " kb","图片大小超过限制",4,null).clipContent;   
  123.             }   
  124.   
  125.         }   
  126.   
  127.         //验证图片大小   
  128.         private function checkFileSize(filesize:Number):Boolean{   
  129.             var r:Boolean = false;   
  130.             if (filesize > _maxFileSize){   
  131.                 r = false;   
  132.                 trace("false");   
  133.             }else if (filesize <= _maxFileSize){   
  134.                 r = true;   
  135.                 trace("true");   
  136.             }   
  137.             if (_maxFileSize == 0){   
  138.                 r = true;   
  139.             }   
  140.             return r;   
  141.         }   
  142.   
  143.         //上传失败处理事件   
  144.         private function errorHandler(evt:IOErrorEvent):void{    
  145.             Alert.show(evt.text,"上传失败,检查网络");    
  146.         }    
  147.         //上传成功处理   
  148.         private function doFileUploadComplete(evt:Event):void{    
  149.             if(_rollBack!=""){   
  150.                 this.dispatchEvent(new Event(_rollBack));   
  151.             }   
  152.         }   
  153.   
  154.         private function securityErrorHandler(event:SecurityErrorEvent):void{   
  155.             mx.controls.Alert.show(event.text,"Security Error",0);   
  156.         }   
  157.   
  158.         private function httpStatusHandler(event:HTTPStatusEvent):void {   
  159.             if (event.status != 200){   
  160.                 mx.controls.Alert.show(event.toString(),"上传错误",0);   
  161.             }   
  162.         }   
  163.   
  164.     }   
  165. }  


其他工具类:
Java代码 复制代码
  1. package  
  2. {   
  3.     import mx.formatters.DateFormatter;   
  4.   
  5.     public class CreateImageName   
  6.     {   
  7.   
  8.         public  function getName(i:int):String   
  9.         {   
  10. //          var random:String=Math.ceil(Math.random() * 9)+""+i+ ".jpg";   
  11.             var random:String=i+"";   
  12.             var time:Date=new Date();   
  13.             var fr:DateFormatter=new DateFormatter();   
  14.             fr.formatString="YYYYMMDDJJNNSS";   
  15.             var imageName:String=fr.format(time)+random;   
  16. //          return random;   
  17.             return "/promotions/"+imageName;   
  18.         }   
  19.   
  20.     }   
  21. }  


Java代码 复制代码
  1. package    
  2. {   
  3.     public class URLconst   
  4.     {   
  5.         public static var uploadStartURL:String="http://172.16.50.147:80/backWeb/photoUpload";   
  6.         public static var uploadEndURL:String=".html";   
  7.            
  8.     }   
  9. }  



java 端 控制器
Java代码 复制代码
  1. package net.shopin.web;   
  2.   
  3. import cn.com.infosec.icbc.ReturnValue;   
  4. import net.shopin.util.FTPUtil;   
  5. import net.shopin.util.FtpServerConf;   
  6. import org.apache.commons.fileupload.FileItem;   
  7. import org.apache.commons.fileupload.FileUploadException;   
  8. import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
  9. import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  10. import org.springframework.beans.factory.annotation.Autowired;   
  11. import org.springframework.stereotype.Controller;   
  12. import org.springframework.ui.Model;   
  13. import org.springframework.web.bind.annotation.PathVariable;   
  14. import org.springframework.web.bind.annotation.RequestMapping;   
  15. import org.springframework.web.bind.annotation.RequestMethod;   
  16.   
  17. import java.io.FileInputStream;   
  18. import java.io.IOException;   
  19. import java.io.OutputStream;   
  20. import java.util.Date;   
  21. import java.sql.Timestamp;   
  22. import java.text.SimpleDateFormat;   
  23. import java.util.Iterator;   
  24. import java.util.List;   
  25.   
  26. import javax.servlet.ServletException;   
  27. import javax.servlet.http.HttpServlet;   
  28. import javax.servlet.http.HttpServletRequest;   
  29. import javax.servlet.http.HttpServletResponse;   
  30.   
  31.   
  32. /**  
  33.  * 图片上传控制器  
  34.  */  
  35. @Controller  
  36. public class PhotoUploadController {   
  37.     @Autowired  
  38.     FtpServerConf ftpServer;   
  39.   
  40.     // 限制文件的上传大小   
  41.     private int maxPostSize = 100 * 1024 * 1024;   
  42.   
  43.     @RequestMapping(value = "/photoUpload/{fileDic}/{name}.html", method = {RequestMethod.GET, RequestMethod.POST})   
  44.     public String register(Model m, @PathVariable("name") String name, @PathVariable("fileDic") String fileDic, HttpServletRequest request) {   
  45.         DiskFileItemFactory factory = new DiskFileItemFactory();   
  46.         factory.setSizeThreshold(4096);   
  47.         ServletFileUpload upload = new ServletFileUpload(factory);   
  48.         upload.setSizeMax(maxPostSize);   
  49.         OutputStream out = null;   
  50.         try {   
  51.             List fileItems = upload.parseRequest(request);   
  52.             Iterator iter = fileItems.iterator();   
  53.             while (iter.hasNext()) {   
  54.                 FileItem item = (FileItem) iter.next();   
  55.                 if (!item.isFormField()) {   
  56.                     String filename = item.getName();   
  57. //                    System.out.println("-------" + filename);   
  58.                     System.out.println("---name----" + name);   
  59.                     name = name + ".jpg";   
  60.                     // 保存图片到MongoD   
  61. //                  MongodServiceImpl mongoDAO = new MongoService("shopin_db_img", "img");   
  62. //                  mongoDAO.saveFile(item.get(), "20090103.jpg");   
  63. //                    String fileDic = "promotions";   
  64.                     // 保存图片到FTP   
  65.                     FTPUtil.saveToFTP(out, fileDic, name, item, ftpServer.getHost(), ftpServer.getUsername(), ftpServer.getPassword());   
  66.                 }   
  67.             }   
  68.         } catch (FileUploadException e) {   
  69.             e.printStackTrace();   
  70.             System.out.println(e.getMessage() + "结束");   
  71.         }   
  72.         return "index";   
  73.     }  


FTP 操作工具类
Java代码 复制代码
  1. package net.shopin.util;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.OutputStream;   
  5.   
  6. import org.apache.commons.fileupload.FileItem;   
  7.   
  8. import com.enterprisedt.net.ftp.FTPException;   
  9. import com.enterprisedt.net.ftp.FileTransferClient;   
  10. import org.springframework.beans.factory.annotation.Autowired;   
  11.   
  12. public class FTPUtil {   
  13.   
  14.     public static void saveToFTP(OutputStream out, String fileDic, String filename,   
  15.                                  FileItem item, String host, String username, String password) {   
  16.         FileTransferClient ftp = null;   
  17.         try {   
  18.             ftp = new FileTransferClient();   
  19.             ftp.setRemoteHost(host);   
  20.             ftp.setUserName(username);   
  21.             ftp.setPassword(password);   
  22.             ftp.setRemotePort(21);   
  23.             ftp.connect();   
  24.             ftp.changeDirectory(fileDic);   
  25.             if (!ftp.exists(filename)) {   
  26.                 out = ftp.uploadStream(filename);   
  27.                 out.write(item.get());   
  28.             }   
  29.   
  30.             // ftp.uploadFile("d:\\shopin\\report.sql", "test.jpg");   
  31.             // ftp.createDirectory("test");   
  32.         } catch (FTPException e) {   
  33.             e.printStackTrace();   
  34.         } catch (IOException e) {   
  35.             e.printStackTrace();   
  36.         } finally {   
  37.             try {   
  38.                 if (out != null) {   
  39.                     out.close();   
  40.                 }   
  41.                 ftp.disconnect();   
  42.             } catch (FTPException e) {   
  43.                 e.printStackTrace();   
  44.             } catch (IOException e) {   
  45.                 e.printStackTrace();   
  46.             }   
  47.         }   
  48.     }   
  49.   
  50.     public static void delFromFTP(String fileDic, String filename,   
  51.                                   String host, String username, String password) {   
  52.         FileTransferClient ftp = null;   
  53.         try {   
  54.             ftp = new FileTransferClient();   
  55.             ftp.setRemoteHost(host);   
  56.             ftp.setUserName(username);   
  57.             ftp.setPassword(password);   
  58.             ftp.setRemotePort(21);   
  59.             ftp.connect();   
  60.   
  61.             ftp.changeDirectory(fileDic);   
  62.             boolean flag = ftp.exists(filename);   
  63. //            System.out.println("--------"+flag);   
  64.             if (flag) {   
  65.                 ftp.deleteFile(filename);   
  66.             }   
  67.             // ftp.uploadFile("d:\\shopin\\report.sql", "test.jpg");   
  68.             // ftp.createDirectory("test");   
  69.         } catch (FTPException e) {   
  70.             e.printStackTrace();   
  71.         } catch (IOException e) {   
  72.             e.printStackTrace();   
  73.         } finally {   
  74.             try {   
  75.                 ftp.disconnect();   
  76.             } catch (FTPException e) {   
  77.                 e.printStackTrace();   
  78.             } catch (IOException e) {   
  79.                 e.printStackTrace();   
  80.             }   
  81.         }   
  82.     }   
  83. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约