flex端:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.controls.Alert;
import mx.managers.CursorManager;
private var file:FileReference = new FileReference();
private var serverSide:String = "FileUploadServlet";//指明后台处理的文件
[Bindable]
private var percent : int = 0;
public function init():void {
//添加监听
file.addEventListener(Event.SELECT, selectHandler);
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteDataHandler);
browseBtn.addEventListener(MouseEvent.CLICK, browseHandler);
}
public function browseHandler(event:MouseEvent): void
{
file.browse();
}
public function reset(): void
{
// clear input file
fileTxt.text="";
// reset process bar
processBar.setProgress(0, 100);
processBar.visible=false;
processBar.label="Uploading " + 0 + "%";
}
public function selectHandler(event:Event): void
{
// display selected file
fileTxt.text=file.name;
}
public function ioErrorHandler(event:IOErrorEvent): void
{
Alert.show("upload file IO Error!");
}
public function uploadCompleteDataHandler(event:DataEvent): void
{
}
public function progressHandler(event:ProgressEvent): void
{
var size:int = file.size;
percent = event.bytesLoaded/event.bytesTotal * 100;
// set process bar
processBar.setProgress(percent, 100);
processBar.label="Uploading " + percent + "%";
if (event.bytesLoaded == event.bytesTotal)
{
processBar.label="Upload file successfully!";
image.visible=false;
}
}
private function completeHandler(event:Event):void
{
}
public function upload(): void
{
if(fileTxt.text == "")
{
Alert.show("Please select upload file");
return;
}
processBar.visible=true;
image.visible=true;
file.upload(new URLRequest(serverSide));
}
//取消操作
public function cancelHandler():void
{
Alert.show("Could you cancel the uploading!","Confirm", 3, this, cancelEvent);
}
public function cancelEvent(event:CloseEvent):void
{
if (event.detail == Alert.YES)
{
file.cancel();
image.visible=false;
processBar.setProgress(0, 100);
processBar.label="You have canceled the upload file!";
}
}
]]>
</mx:Script>
<mx:Panel width="428" height="256" layout="absolute" title="File Upload" fontSize="12" y="69" x="84">
<mx:Label x="49" y="32" text="File:"/>
<mx:TextInput x="88" y="30" id="fileTxt" width="226" editable="false"/>
<mx:Button id="browseBtn" x="316.5" y="30" label="Browse"/>
<mx:Button id="uploadBtn" x="88" y="92" label="UPLOAD IT" click="upload()"/>
<mx:Button id="cancelBtn" x="183" y="92" label="Cancel" visible="false"/>
<mx:Button id="resetBtn" x="231" y="92" label="Reset" click="reset()"/>
<mx:ProgressBar id="processBar" labelPlacement="bottom" themeColor="#EE1122" minimum="0"
visible="false" maximum="100" color="0x323232" label="Loading 0%"
direction="right" mode="manual" width="358.5" y="144" x="21.5"/>
<mx:Image id="image" visible="false" x="381" y="139" source="assets/cancel_16.png" click="cancelHandler()"/>
</mx:Panel>
</mx:Application>
java端:
import java.io.File;
import java.io.IOException;
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;
/**
* @author li-wenliang
* Jun 29, 2009 1:29:05 PM
*/
public class FileUploadServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
* @param request
* servlet request
* @param response
* servlet response
*/
//
// private String uploadPath = ".\\upload\\";
private int maxPostSize = 100 * 1024 * 1024;
public FileUploadServlet() {
super();
}
public void destroy() {
super.destroy();
}
/**
* 文件上传操作
* Jun 29, 2009 1:31:08 PM
* Administrator li-wenliang
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String uploadPath = request.getRealPath("/") + "upload\\";
try {
response.setContentType("text/html;charset=utf-8");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("isMultipart :" + isMultipart);
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置上传工厂的限制
factory.setSizeThreshold(4096);
try {
//创建一个上传文件的ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
//设置最大的上传限制
upload.setSizeMax(maxPostSize);
//处理HTTP请求,items是所有的表单项
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
//遍历所有的表单项
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
//取得文件名
String name = item.getName();
System.out.println(name);
System.out.println(uploadPath + name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
修改web.xml
在里面添加:
<servlet>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/FileUploadServlet</url-pattern>
</servlet-mapping>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.controls.Alert;
import mx.managers.CursorManager;
private var file:FileReference = new FileReference();
private var serverSide:String = "FileUploadServlet";//指明后台处理的文件
[Bindable]
private var percent : int = 0;
public function init():void {
//添加监听
file.addEventListener(Event.SELECT, selectHandler);
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteDataHandler);
browseBtn.addEventListener(MouseEvent.CLICK, browseHandler);
}
public function browseHandler(event:MouseEvent): void
{
file.browse();
}
public function reset(): void
{
// clear input file
fileTxt.text="";
// reset process bar
processBar.setProgress(0, 100);
processBar.visible=false;
processBar.label="Uploading " + 0 + "%";
}
public function selectHandler(event:Event): void
{
// display selected file
fileTxt.text=file.name;
}
public function ioErrorHandler(event:IOErrorEvent): void
{
Alert.show("upload file IO Error!");
}
public function uploadCompleteDataHandler(event:DataEvent): void
{
}
public function progressHandler(event:ProgressEvent): void
{
var size:int = file.size;
percent = event.bytesLoaded/event.bytesTotal * 100;
// set process bar
processBar.setProgress(percent, 100);
processBar.label="Uploading " + percent + "%";
if (event.bytesLoaded == event.bytesTotal)
{
processBar.label="Upload file successfully!";
image.visible=false;
}
}
private function completeHandler(event:Event):void
{
}
public function upload(): void
{
if(fileTxt.text == "")
{
Alert.show("Please select upload file");
return;
}
processBar.visible=true;
image.visible=true;
file.upload(new URLRequest(serverSide));
}
//取消操作
public function cancelHandler():void
{
Alert.show("Could you cancel the uploading!","Confirm", 3, this, cancelEvent);
}
public function cancelEvent(event:CloseEvent):void
{
if (event.detail == Alert.YES)
{
file.cancel();
image.visible=false;
processBar.setProgress(0, 100);
processBar.label="You have canceled the upload file!";
}
}
]]>
</mx:Script>
<mx:Panel width="428" height="256" layout="absolute" title="File Upload" fontSize="12" y="69" x="84">
<mx:Label x="49" y="32" text="File:"/>
<mx:TextInput x="88" y="30" id="fileTxt" width="226" editable="false"/>
<mx:Button id="browseBtn" x="316.5" y="30" label="Browse"/>
<mx:Button id="uploadBtn" x="88" y="92" label="UPLOAD IT" click="upload()"/>
<mx:Button id="cancelBtn" x="183" y="92" label="Cancel" visible="false"/>
<mx:Button id="resetBtn" x="231" y="92" label="Reset" click="reset()"/>
<mx:ProgressBar id="processBar" labelPlacement="bottom" themeColor="#EE1122" minimum="0"
visible="false" maximum="100" color="0x323232" label="Loading 0%"
direction="right" mode="manual" width="358.5" y="144" x="21.5"/>
<mx:Image id="image" visible="false" x="381" y="139" source="assets/cancel_16.png" click="cancelHandler()"/>
</mx:Panel>
</mx:Application>
java端:
import java.io.File;
import java.io.IOException;
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;
/**
* @author li-wenliang
* Jun 29, 2009 1:29:05 PM
*/
public class FileUploadServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
* @param request
* servlet request
* @param response
* servlet response
*/
//
// private String uploadPath = ".\\upload\\";
private int maxPostSize = 100 * 1024 * 1024;
public FileUploadServlet() {
super();
}
public void destroy() {
super.destroy();
}
/**
* 文件上传操作
* Jun 29, 2009 1:31:08 PM
* Administrator li-wenliang
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String uploadPath = request.getRealPath("/") + "upload\\";
try {
response.setContentType("text/html;charset=utf-8");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("isMultipart :" + isMultipart);
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置上传工厂的限制
factory.setSizeThreshold(4096);
try {
//创建一个上传文件的ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
//设置最大的上传限制
upload.setSizeMax(maxPostSize);
//处理HTTP请求,items是所有的表单项
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
//遍历所有的表单项
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
//取得文件名
String name = item.getName();
System.out.println(name);
System.out.println(uploadPath + name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
修改web.xml
在里面添加:
<servlet>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/FileUploadServlet</url-pattern>
</servlet-mapping>