最近老是被问到flex的上传问题怎么解决,今天就贴出web下的上传实现方式,以后会贴出air下的代码,敬请期待: flex4 代码: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <!--[CDATA[ import flashx.textLayout.events.SelectionEvent; import mx.controls.Alert; import mx.events.ListEvent; private var myFileReference:FileReferenceList;//文件调控器 private function upload():void{ var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png"); var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.doc;*.txt"); myFileReference = new FileReferenceList(); myFileReference.addEventListener(Event.SELECT, selectHandler);//选择完后的处理 myFileReference.browse([imagesFilter, docFilter]); } /**选择完上传文件的处理方法**/ private function selectHandler(event:Event):void{ //得到所有上传文件 var fileReferences:Array = myFileReference.fileList as Array; var requestUrl:URLRequest = new URLRequest("http://localhost:8080/upload/servlet/FileUploadServlet"); var oneReference:FileReference = fileReferences.pop() as FileReference; oneReference.addEventListener(Event.COMPLETE,uploadIterative); oneReference.upload(requestUrl); } /**上传迭代**/ private function uploadIterative(event:Event):void{ Alert.show((event.target as FileReference).name+"上传完成!") if((myFileReference.fileList as Array).length>0){ selectHandler(null); } } ]]--> </fx:Script> <s:Button click="upload();"/> </s:Application> java 代码: package servlet; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { // 定义文件的上传路径 private String uploadPath = "c://"; // 限制文件的上传大小 private static final long maxFileSize = 104857600; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); Date date = new Date(); try { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(4096); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxFileSize); upload.setHeaderEncoding("UTF-8"); List fileItems = upload.parseRequest(request); Iterator iter = fileItems.iterator(); // 依次处理每一个文件: String dictId = request.getParameter("dictId"); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String fileName = item.getName(); long fileSize = item.getSize(); if (fileName != null && fileName.trim().length() > 0 && fileSize < maxFileSize) { // 取得上传文件后缀名 int index=fileName.lastIndexOf("."); String docType = fileName.substring(index); String docName=fileName.substring(0,index); File dir=new File(getServletContext().getRealPath("upload/template/")); if(!dir.exists()){ dir.mkdirs(); } String filePath = "upload/template/" + date.getTime() + docType; File uploadFile = new File(getServletContext().getRealPath(filePath)); item.write(uploadFile); } } } } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }