Flex +java 多文件上传带进度条


最终效果图:



源码:

Flex文件:

<common:TitledBorderBox width="100%"
			height="100%">
				<mx:Form width="100%">
					<mx:FormItem label="附件列表:"
								 indicatorGap="0"
								 height="111"
								 width="675">
						<mx:HBox height="100%"
								 width="587">
							<mx:DataGrid width="516"
										 height="100%"
										 id="dataGrid">
								<mx:columns>
									<mx:DataGridColumn headerText="文件名称"
													   dataField="fileName"
													   fontSize="12"/>
									<mx:DataGridColumn headerText="文件大小"
													   dataField="fileSize"
													   fontSize="12"/>
									<mx:DataGridColumn headerText="文件类型"
													   dataField="type"
													   fontSize="12"/>
									<mx:DataGridColumn width="130"
													   headerText="操作"
													   fontSize="12">
										<mx:itemRenderer>
											<mx:Component>
												<mx:HBox width="300"
														 paddingLeft="2"
														 horizontalGap="2"
														 verticalAlign="middle">
													<mx:ProgressBar id="progress"
																	width="100%"
																	minimum="0"
																	maximum="100"
																	source="{data.fileRefrence}"
																	labelPlacement="center"
																	label="%3%%">
													</mx:ProgressBar>
												</mx:HBox>
											</mx:Component>
										</mx:itemRenderer>
									</mx:DataGridColumn>
								</mx:columns>
							</mx:DataGrid>
							<mx:VBox>
								<mx:Button label="浏 览"
										   id="browse"
										   click="select(event)"
										   fontSize="12"/>
								<mx:Button label="取 消"
										   id="cancel"
										   fontSize="12"
										   click="onCancel()"/>
							</mx:VBox>

						</mx:HBox>
					</mx:FormItem>
				</mx:Form>
				<mx:HBox width="100%"
						 horizontalAlign="center"
						 height="100%">
					<mx:Button label="提 交"
							   click="submit()"/>
				</mx:HBox>

			</common:TitledBorderBox>


AS文件:

private var myFileRef:FileReferenceList=new FileReferenceList();
public var arr2:ArrayCollection=new ArrayCollection(); //存放为被上传的东西,与显示无关
private var urlRequest:URLRequest=new URLRequest("servlet/Upload"); //与后台交互
public var arr:ArrayCollection=new ArrayCollection();

//初始化
private function init():void
{
	this.myplan.showsgtype(); //查询 事故类型
	this.myplan.queryplanlevel(); //查询预案级别
	this.myplan.queryplandept(); //查询制定部门
	myFileRef.addEventListener(Event.SELECT, selectHandler); //监听上传对话框确定按钮
}

private function selectHandler(event:Event):void
{ //上传框确认按钮按下
	for (var i:int=0; i < myFileRef.fileList.length; i++)
	{
		var f:FileReference=FileReference(myFileRef.fileList[i]);
		var obj:Object=new Object();
		obj.fileRefrence=f; //与进度条绑定
		obj.fileName=f.name;
		obj.fileSize=(f.size / 1024).toFixed(2) + "KB"; //toFixed(num)四舍五入到小数点后几位
		obj.type=f.type;
		arr.addItem(obj);
		arr2.addItem(obj);
	}
	dataGrid.dataProvider=arr;
}


private function select(event:MouseEvent):void
{ //浏览按钮按下
	myFileRef.browse();
}

private function uploadCompleteHandler(event:Event):void
{ //删除已上传文件在数组中的信息
	for each (var item in arr2)
	{
		if (item.fileRefrence == event.currentTarget)
		{
			arr2.source.indexOf(item); //找到已经上传的文件,返回下标
			var index:Number=arr2.source.indexOf(item);
			arr2.removeItemAt(index); //删除已经上传的文件
		}
	}
}

private function onCancel():void
{
	arr.removeAll();
	arr2.removeAll();
	dataGrid.dataProvider=arr;
}

private function submit():void
{
for (var i:int=0; i < arr2.length; i++)
        {
            var f:FileReference=FileReference(arr2[i]['fileRefrence']);
            f.upload(urlRequest);
            f.addEventListener(Event.COMPLETE, uploadCompleteHandler);
        }
} 

Java文件:

package cn.com.common;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 上传文件
 * 
 * @author LGQ
 * @data 2010-11-10
 * 
 */
@SuppressWarnings("serial")
public class Upload extends HttpServlet {
	// 限制文件上传大小
	private final int maxPostSize = 10 * 1024 * 1024;
	// 定义文件的上传路径
	private String upLoadPath = null;

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	@SuppressWarnings( { "unchecked", "unchecked", "deprecation" })
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		// 创建对象的工厂,可以设定缓冲区大小和存放临时文件目录。
		DiskFileItemFactory factory = new DiskFileItemFactory();

		factory.setSizeThreshold(4096); // 设置是否将上传文件已临时文件的形式保存在磁盘的临界值(以字节为单位的int值)
		// factory.setRepository(new File("e:/temp"));// 设置上传文件的临时目录
		// 处理表单数据,将数据封装到 FileItem 对象中。
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setSizeMax(maxPostSize);
		upload.setHeaderEncoding("UTF-8");
		try {
			List<FileItem> fileItems = upload.parseRequest(request);
			Iterator<FileItem> iter = fileItems.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				// 判断是否是普通字段
				if (!item.isFormField()) {
					String name = item.getName();
					@SuppressWarnings("unused")
					String value = item.getString();
					@SuppressWarnings("unused")
					String strDirPath = request.getSession()// 服务器路径
							.getServletContext().getRealPath("/");
					this.upLoadPath = strDirPath + "uploadfile/";
					// 判断文件夹是否存在,不存在则创建
					if (!(new File(upLoadPath).exists())) {
						new File(upLoadPath).mkdir();
					}
					System.out.println(upLoadPath);
					// 将文件保存到服务器下
					item.write(new File(strDirPath + "uploadfile/" + name));
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

本文可参考:http://www.beijibear.com/index.php?aid=78

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值