您的位置:首页 > 编程语言 > Java开发

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

2012-12-03 14:42 543 查看
最终效果图:

源码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: