Flex代码,upload.mxml:
<?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" creationComplete="init();">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<mx:Button label="上传文件" click="myupload()"  x="85" y="106"/>
<mx:Label text="文件上传"  x="84" y="27"/>
<mx:ProgressBar minimum="0" maximum="100" mode="manual" id="progress1" label="当前进度:0%"  x="84" y="65"/>
<mx:Label id="lbProgress"  x="87" y="142"/>

<fx:Script>
<![CDATA[
import flash.events.Event;
import flash.net.FileFilter;
import flash.net.FileReference;
import mx.events.CloseEvent; 
import mx.controls.Alert;

private var fileRef:FileReference = new FileReference();
private function init():void{
Security.allowDomain("*"); 
fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
fileRef.addEventListener(Event.SELECT, onSelect); 
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.addEventListener("ioError", ioerrorHandler);
}

private function myupload():void{
var imageTypes:FileFilter = new FileFilter("图片 (*.jpg, *.jpeg, *.gif,*.png)", "*.jpg; *.jpeg; *.gif; *.png");
var textTypes:FileFilter = new FileFilter("文本文件(*.txt)","*.txt;");
var officeType:FileFilter = new FileFilter("Office文件(*.doc, *.xls)","*.doc; *.xls");
var anyType:FileFilter = new FileFilter("所有文件(*.*)","*.*");
var allTypes:Array = new Array(anyType, textTypes,officeType,imageTypes);
try{
var success:Boolean = fileRef.browse(allTypes);
}catch (error:Error){
Alert.show("无法浏览文件:"+error.toString());
return;
}
}
private function ioerrorHandler(event:Event):void{
Alert.show("上传文件出错:"+event.toString());
return;
}
private function progressHandler(event:ProgressEvent):void{
lbProgress.text = " 已上传 " + (event.bytesLoaded/1024).toFixed(2)+ " K,共 " + (event.bytesTotal/1024).toFixed(2) + " K";
var proc:uint = event.bytesLoaded / event.bytesTotal * 100;
progress1.setProgress(proc, 100);
progress1.label= "当前进度: " + " " + proc + "%";

}
private function onSelect(e: Event): void{ 
Alert.show("上传 " + fileRef.name + " (共 "+Math.round(fileRef.size)+" 字节)?", 
"确认上传", 
Alert.YES|Alert.NO, 
null, 
selectHandler); 

private function selectHandler(event:CloseEvent):void{
if(event.detail == Alert.NO)
return;
var request:URLRequest = new URLRequest("http://localhost:8080/FileUpload/UploadHandler")
try
{
fileRef.upload(request);
}
catch (error:Error)
{
Alert.show("上传文件出错:"+error.toString());
return;
}
}
private function completeHandler(event:Event):void{
Alert.show("上传成功!");
}
]]>
</fx:Script>

</s:Application>Java Servlet代码,FileUploaded.java:
package fileupload;import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
 * 
 * 
 * @author huahua
 */
public class FileUploaded extends HttpServlet {
private String uploadPath = "E:\\"; // 定义文件的上传路径
private int MAXFILESIZE = 100 * 1024 * 1024; // 限制文件的上传大小 public FileUploaded() {
super();
}
public void destroy() {
super.destroy();
} // 主处理
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("Access !");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter(); // 保存文件到服务器中 |Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096); // 超出这个大小放磁盘,否则放在内存中
ServletFileUpload upload = new ServletFileUpload(factory); // Create a new file upload handler
upload.setSizeMax(MAXFILESIZE);
try {
List fileItems = upload.parseRequest(request); // Parse the request,have a List of file items that you need to process
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 如果item.isFormField为true,则代表简单域,否则为file域。Field有2种,一种是简单域,一种是file域。
if (!item.isFormField()) {
// 获得文件名,包括文件的扩展名
String name = item.getName();
System.out.println(name);
try {
// "factory.setRepository(new File(path));"可以设置临时目录
item.write(new File(uploadPath + name)); // 写入磁盘。
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
} /**
 * Handles the HTTP <code>GET</code> method.
 * 
 * @param request
 *            servlet请求
 * @param response
 *            servlet响应
 */
// 如果是GET请求,则调用doGet方法。
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
} /**
 * Handles the HTTP <code>POST</code> method.
 * 
 * @param request
 *            servlet请求
 * @param response
 *            servlet响应
 */
// 如果是POST请求,则调用doPost方法
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}

/**
 * Returns a short description of the servlet.
 */
public String getServletInfo() {
return "ServletName: FileUploaded. extends: HttpServlet.";
}
}web.xml中再配置一下:
<servlet>
        <servlet-name>UploadHandler</servlet-name>
        <servlet-class>fileupload.FileUploaded</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadHandler</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>出现以下错误:
the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null结束
                                                                   请大侠帮忙啊