事先要在给工程添加两个库文件,一个是commons-fileupload-1.2.1,一个是commons-io-1.2
客户端只需要FileReference 或者是FileReferenceList这两个类就可以了
服务器上传代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import javax.servlet.ServletContext;
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;
public class FileUploadServlet extends HttpServlet
{
private String uploadPath = "D:\\upload\\";
private String skStr = "";
private int maxPostSize = 1000 * 1024 * 1024;
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException
{
String filePathaa = this.getServletConfig().getServletContext().getRealPath("/");
res.setContentType("text/html;charset=UTF-8");
req.setCharacterEncoding("UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*20);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try
{
List fileItems = upload.parseRequest(req);
Iterator iter = fileItems.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
if (!item.isFormField())
{
String name = item.getName();
try
{
File skFile = new File(uploadPath + name);
if (skFile.exists())
{
skFile.delete();
item.write(new File(uploadPath + name));
}
else
{
item.write(new File(uploadPath + name));
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
} catch (FileUploadException e)
{
e.printStackTrace();
}
}
}
客户端代码(主要是as文件,通过<mx:script source=''>导入的mxml中)
import flash.events.Event;
import flash.net.FileReference;
import flash.net.URLRequest;
import mx.controls.Alert;
private var selectFile:FileReference ;
private function init():void
{
selectFile = new FileReference();
}
private function upLoadFiles():void
{
try
{
selectFile.browse();
selectFile.addEventListener(Event.SELECT, selectHandler1);
}
catch (error:Error)
{
Alert.show("文件选择出现错误,请选择正确的文件");
}
}
/** *//**
* 如果文件被选中,则执行该方法
* */
private function selectHandler1(event:Event):void
{
var request:URLRequest = new URLRequest("http://localhost:8080/upLoaderfile/FileUploadServlet");
selectFile.addEventListener(ProgressEvent.PROGRESS, progressHandler);
selectFile.addEventListener(Event.COMPLETE,UpLoadcompleteHandler);
try
{
selectFile.upload(request);
}
catch (error:Error)
{
Alert.show(error.message.toString());
}
}
private function UpLoadcompleteHandler(event:Event):void
{
var upLoadFiles:FileReference = FileReference(event.target);
var fileNames:String = upLoadFiles.name;
Alert.show('文件'+fileNames+'上传成功')
}
private function progressHandler(e:ProgressEvent):void
{
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
trace( proc + "%");
}
这仅仅是服务器和客户端的代码要将二者联系起来需要在服务器写配置文件
就是在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>
最后部署工程
然后运行