flex多文件上传工具(自用)
JAVA类
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;
import com.shine.framework.config.FrameworkConfigFactory;
public class FileUploaded extends HttpServlet {
// 定义文件的上传路径
private String uploadPath = FrameworkConfigFactory.getConfig().getSysPath()
+ "//upload//";
// 限制文件的上传大小
private int maxPostSize = 100 * 1024 * 1024;
public FileUploaded() {
super();
}
public void destroy() {
super.destroy();
}
public void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("Access !");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = new String(item.getName().getBytes("gbk"),"utf-8");
System.out.println(name);
try {
item.write(new File(uploadPath + name));
// SaveFile s = new SaveFile();
// s.saveFile(name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on
// the + sign on the left to edit the code.">
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
Flex类
public var fileArray:FileUpdataUtil=new FileUpdataUtil;
private var f:FileReference;
private var n:int=0;
public var targetUrl:String="/SaleSystem/FileUploaded";
//格式:*.jpg;*.jpeg;*.png
public var fileType:String="*.*";
public var fileCount:int=999;
private function browseFile():void
{
if (fileArray.length < fileCount)
{
var file:FileReference=new FileReference();
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.COMPLETE, completeHandle);
var types:FileFilter=new FileFilter(fileType, fileType);
var allTypes:Array=new Array(types);
file.browse(allTypes);
file.browse();
}
else
{
Alert.show("超过了本次上传限制了");
}
}
private function cleanUpload():void
{
cVBox.removeAllChildren();
fileArray.removeAll();
}
private function onSelect(e:Event):void
{
f=FileReference(e.target);
if (f.name.length < 11)
{
Alert.show("添加 " + f.name + " (共 " + Math.round(f.size) + " 字节)?", "确认添加", Alert.YES | Alert.NO, null, addFileUpload);
}
else
{
Alert.show("上传文件名过长,请控制在7个字以内...");
}
}
private function addFileUpload(e:CloseEvent):void
{
var hBox:HBox=new HBox;
hBox.width=cVBox.width;
hBox.height=40;
cVBox.addChild(hBox);
var label:Label=new Label;
label.text=f.name;
label.height=40;
label.width=50;
label.toolTip=f.name;
hBox.addChild(label);
var progressBar:ProgressBar=new ProgressBar;
progressBar.width=hBox.width - 60;
progressBar.height=40;
progressBar.mode="manual";
progressBar.setStyle("themeColor", "0xF20D7A");
hBox.addChild(progressBar);
var fileUpdataModel:FileUpdataModel=new FileUpdataModel;
fileUpdataModel.file=f;
fileUpdataModel.progressBar=progressBar;
fileArray.addItem(fileUpdataModel);
}
private function proceedWithUpload():void
{
var request:URLRequest=new URLRequest(targetUrl);
FileReference((fileArray.getItemAt(n) as FileUpdataModel).file).upload(request);
tip.text="正在上传:" + FileReference((fileArray.getItemAt(n) as FileUpdataModel).file).name;
}
private function onProgress(e:ProgressEvent):void
{
var proc:uint=e.bytesLoaded / e.bytesTotal * 100;
ProgressBar((fileArray.getItemAt(n) as FileUpdataModel).progressBar).setProgress(proc, 100);
ProgressBar((fileArray.getItemAt(n) as FileUpdataModel).progressBar).label="当前进度: " + " " + proc + "%";
}
private function completeHandle(event:Event):void
{
n++;
if (n < fileArray.length)
{
var request:URLRequest=new URLRequest(targetUrl);
FileReference((fileArray.getItemAt(n) as FileUpdataModel).file).upload(request);
tip.text="正在上传:" + FileReference((fileArray.getItemAt(n) as FileUpdataModel).file).name;
}
else
{
tip.text="全部上传完成";
n=0;
}
}
]]-->
</mx:Script>
<mx:VBox id="vBox"
width="100%"
height="100%">
<mx:HBox>
<mx:Button id="browseButton"
label="浏览"
click="browseFile()"/>
<mx:Button id="upLoadButton"
label="上传"
click="proceedWithUpload()"/>
<mx:Button id="cleanButton"
label="清理记录"
click="cleanUpload()"/>
<mx:VBox>
<mx:Label id="tip"
text="上传文件"
height="20"/>
<mx:HRule width="{this.width-40-browseButton.width-upLoadButton.width-cleanButton.width}"/>
</mx:VBox>
</mx:HBox>
<mx:VBox id="cVBox"
width="98%"
height="98%"/>
</mx:VBox>
</BaseSimpleCanvas>
web.xml
<servlet-mapping>
<servlet-name>FileUploaded</servlet-name>
<url-pattern>/FileUploaded</url-pattern>
</servlet-mapping>