- 浏览: 336837 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
wshsdlau:
very good!thank you!
Flex4重写组件TitleWindow(最大化、最小化、还原、关闭、拖动、缩放) -
毛广斌:
是病毒,会删除掉oracle数据库
jdk1.6中文帮助文档官方下载 -
bianjiang:
感谢楼主分享
Flex4重写组件TitleWindow(最大化、最小化、还原、关闭、拖动、缩放) -
a25765339:
jdk1.6中文帮助文档官方下载 -
huachongwei:
正需要,谢谢
Flex4重写组件TitleWindow(最大化、最小化、还原、关闭、拖动、缩放)
仿照网上“半杯咖啡”的文章,做了一下FLEX+JAVA的多个文件上传功能
半杯咖啡写的还是很好的,就是没全公开源码(不过主要代码已经给出了...).有些地方我还没弄懂:如进度条刷新... 效果如下:
界面就是仿照“半杯咖啡”的上传界面,加了TOOLTIP,位置没调。大小进行处理了,不过就是进度条没有处理好!删除一条数据时,再加入文件,位置不变的话进度条也不变!试了很多方法,就是没法改变。按照“半杯咖啡”的写法我这就报错,而且没看懂这代码什么意思:grid.parent.refresh(); 而且它是在itemrenderer里面,不好处理! 希望有高人指点一二。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="486" height="316" title="文件上传" fontSize="12" borderColor="#CCECB7" backgroundColor="#A0D3B9" backgroundAlpha="0.8" status="此次共上传{selectedFiles.length}个文件">
<mx:Script>
<![CDATA[
import mx.MediaVO;
import mx.core.Application;
import mx.managers.PopUpManager;
import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
import flash.net.FileReference;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
//声明上传用到的FileReferenceList
[Bindable]
private var fileL:FileReferenceList;
//声明上传文件用到的servlet(其实已经通过show方法传入)
[Bindable]
private var uploadUrl:String;
//选择文件时用到的arrayCollection,也是datagrid的数据源
[Bindable]
private var selectedFiles:ArrayCollection = new ArrayCollection;
//谁需要此组件的时候就调用此方法 UploadPanel.show("http://localhost:8082/Myflex/upload");
public static function show(uploadUrl:String = ""):void
{
var parentApp:Application = Application.application as Application;
var uv:UploadPanel = UploadPanel(PopUpManager.createPopUp(parentApp,UploadPanel,true));
uv.uploadUrl = uploadUrl;
PopUpManager.centerPopUp(uv);
}
//浏览文件
private function addFiles():void
{
fileL = new FileReferenceList();
fileL.addEventListener(Event.SELECT,selectFiles);
fileL.browse();
}
//选择文件到列表
private function selectFiles(event:Event):void
{
for(var i:int=0;i<event.currentTarget.fileList.length;i++){
var f:FileReference = FileReference(event.currentTarget.fileList[i]);
//obj是为了在datagird中显示将要上传的文件信息
var obj:Object= new Object();
obj.fileName = f.name;
obj.fileSize = formatFileSize(f.size);
obj.fileType = f.type;
obj.fileRefrence = f;
selectedFiles.addItem(obj);
}
}
//逐个上传文件
private function uploadHandler():void{
var file:FileReference;
for(var i:int = 0 ;i<selectedFiles.length;i++){
file = FileReference(selectedFiles[i].fileRefrence);
//media是将数据保存到数据库中声明的对象,不保存信息的话,这一段可以不要
var media:MediaVO = new MediaVO();
media.testid = this.parentApplication.tid;
media.mc = file.name;
media.size = formatFileSize(file.size);
media.attachment = "D:\\upload\\"+file.name;
this.parentApplication.aom2.mediaSvc.save(media);//由于remoteObject在别的窗口中,此句不必深究....
file.upload(new URLRequest(uploadUrl));
}
}
// 格式化文件大小
private function formatFileSize(numSize:Number):String {
var strReturn:String;
numSize = Number(numSize / 1000);
strReturn = String(numSize.toFixed(1) + " KB");
if (numSize > 1000) {
numSize = numSize / 1000;
strReturn = String(numSize.toFixed(1) + " MB");
if (numSize > 1000) {
numSize = numSize / 1000;
strReturn = String(numSize.toFixed(1) + " GB");
}
}
return strReturn;
}
//关闭本窗口
private function close():void
{
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:DataGrid id="dg" dataProvider="{selectedFiles}" y="33" width="446" height="184" fontSize="10" horizontalCenter="0" textAlign="center" fontFamily="Verdana">
<mx:columns>
<mx:DataGridColumn headerText="文件名称" dataField="fileName" width="120" showDataTips="true"/>
<mx:DataGridColumn headerText="文件大小" dataField="fileSize" width="60"/>
<mx:DataGridColumn headerText="文件类型" dataField="fileType" width="50"/>
<mx:DataGridColumn headerText="上传状态" width="130">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="130" horizontalGap="2">
<mx:ProgressBar id="progress" width="100"
minimum="0" maximum="100" source="{data.fileRefrence}"
labelPlacement="center" progress="progress.label='%3%%';"
label="%3%%"
paddingLeft="2"
paddingRight="2">
</mx:ProgressBar>
<mx:LinkButton width="15" toolTip="取消上传" click="cancel()"
icon="@Embed('assets/cancel.png')" paddingLeft="2">
<mx:Script>
<![CDATA[
private function cancel():void{
data.fileRefrence.cancel();
progress.label = "已取消";
}
]]>
</mx:Script>
</mx:LinkButton>
<mx:LinkButton width="15" click="deleteItem(event)"
icon="@Embed('assets/delete.png')" toolTip="从列表中删除" paddingLeft="2">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
private function deleteItem(event:MouseEvent):void {
var grid:Object = event.target.parent.parent.parent;
var dp:ArrayCollection = ArrayCollection(grid.dataProvider);
var index:int = dp.getItemIndex(data);
dp.removeItemAt(index);
progress.label = "0%";//刷新进度条的label
//grid.parent.refresh(); //这句在我机子上报错!哎... }
]]>
</mx:Script>
</mx:LinkButton>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<mx:Button x="199" y="233" label="浏览..." click="addFiles()"/>
<mx:Button x="289" y="233" label="上传" width="64" enabled="{selectedFiles.length>0}" click="uploadHandler()"/>
<mx:Button x="379" y="233" label="关闭" width="64" click="close()"/>
</mx:Panel>
相应的servlet代码如下:
package yang.utils; import javax.servlet.http.HttpServlet; import org.apache.log4j.Logger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import java.util.List; import org.apache.commons.fileupload.FileUploadException; import java.util.Iterator; import org.apache.commons.fileupload.FileItem; import java.io.File; import java.io.UnsupportedEncodingException; import org.apache.commons.lang.ObjectUtils; public class FileUploadAction extends HttpServlet{ /** * */ private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(FileUploadAction.class.getName()); private int maxPostSize = 100 * 1024 * 1024; private String uploadPath = "D:\\upload\\"; public FileUploadAction() { } //文件上传 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { logger("begin upload"); try { request.setCharacterEncoding("UTF-8");//防止文件名称带有汉字后传到服务器乱码 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } response.setContentType("text/html; charset=UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 4); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(maxPostSize); logger("request================"+ObjectUtils.toString(request)); List fileItems = null; try { fileItems = upload.parseRequest(request); logger("===================="+ObjectUtils.toString(fileItems)); Iterator iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); log(item.toString()); if (!item.isFormField()) { String name = item.getName(); logger("file name = "+name); try { item.write(new File(uploadPath + name)); } catch (Exception ex) { logger(ex.getMessage()); } } } } catch (FileUploadException ex1) { logger("FileUploadException->"+ex1.getMessage()); } } private void logger(String info){ System.out.println(info); } }
不过不要忘了在web.xml中加入:
<!-- For file uploaded --> <servlet> <servlet-name>FileUploaded</servlet-name> <servlet-class>yang.utils.FileUploadAction</servlet-class> </servlet> <servlet-mapping> <servlet-name>FileUploaded</servlet-name> <url-pattern>/FileUploaded</url-pattern> </servlet-mapping>
此处有两个上传组件可以参考:
http://labs.newmediateam.com/Multifileupload/FileUpload.html
http://weblog.cahlan.com/files/FileUpload/FileUploadApp.html
发表评论
-
FLEXmadel模态窗口透明度设置
2011-10-21 11:53 1139在application中<fx:Style>里或 ... -
Flash/Flex监听浏览器的关闭事件(转)
2011-09-20 16:36 2968如果想用Flash/Flex监听浏览器的关闭事件, 可以通过 ... -
FLEX4样式 (转)
2011-05-31 21:01 13311. 同一控件多样式的设置 在Css文件中定义下面 ... -
Flex4重写组件TitleWindow(最大化、最小化、还原、关闭、拖动、缩放)
2011-05-26 16:52 7446根据9ria的flex3版本 自定义TitleWindow-最 ... -
an internal build error has occurred Flex查看错误日志
2011-03-10 10:26 2104解决方法很简单,按如下步骤: Help > Produ ... -
Flex与Javascript互相通信(转)
2010-02-20 14:26 889在Flex中有这么一个类:ExternalInterface. ... -
Flex从弹出窗口中取回值(转,不过这个有点意思)
2010-02-10 10:38 1812//应用程序窗口 Main.mxml<?xml ve ... -
flex打印要注意的问题
2010-02-05 14:10 2516最近做FLEX打印,被整得焦头烂额。想着打印共用一个组件,可是 ... -
flex下的自动完成输入框(autocomplete input
2010-01-08 16:33 2404在网上看到了这篇文章,感觉很好,特此记录。 转自:http: ... -
Flex Builder绿色安装方法
2009-12-21 14:50 1939Flex Builder绿色安装方法 ... -
flex——ToolTip学习
2009-11-26 18:10 4739这里详细讲解了ToolTip的用法 http://blog. ... -
flex(String)字符串处理
2009-10-22 16:39 2697String类提供indexOf和lastIndexOf两个方 ... -
TabNavigator_ScrollableMenu强大的TabNavigator
2009-10-22 14:47 3263看到一个老外07年写的一个组件:TabNavigator_Sc ... -
flex——datagrid中的wordWrap设置为True,有时不起作用
2009-08-27 17:04 2913datagrid中的wordWrap设置为True,有时不起作 ... -
flex——双击datagrid编辑、验证、保存
2009-08-05 17:50 13800DataGrid默认是单击修改,太不方便。根据http://b ... -
flex——DataGrid中的固定序号
2009-08-05 13:46 4277在Datagrid中利用labelFunction来显示固定序 ... -
初始化flex时,组件自动获得焦点
2009-07-03 10:11 5779都知道在flex页面中设置焦点是:application.fo ... -
PopUpButton结合Menu的二级菜单
2009-06-16 17:42 1771和 请注意:行数是单选,所以数据源为:type=" ... -
as3读取xml文件
2009-06-12 15:37 3707root.xml: <?xml version=&qu ... -
DataGridColumn中labelFunction的用法
2009-06-09 15:48 5365帮助文档: labelFunction 属性 ...
相关推荐
标题中的“Flex拍照并上传到java后台——未调试成功”表明这是一个关于使用Adobe Flex技术进行拍照功能实现,并将拍摄的照片上传到Java后端服务器的项目,但目前该项目可能在调试阶段遇到了问题。Flex是一种用于创建...
《Flex + Java 最佳实例(附工程)》 在当今的软件开发领域,Flex与Java的结合使用成为了构建富互联网应用程序(RIA)的一种流行选择。Flex作为Adobe开发的开源前端框架,以其强大的图形用户界面(GUI)设计能力,...
本文将详细介绍一款基于Flex和Java技术开发的档案管理系统——XYZP,该系统充分利用了这两种技术的优势,构建出一个用户友好、功能强大的平台。 Flex,全称为Adobe Flex,是一种用于创建富互联网应用程序(RIA)的...
BlazeDS是Adobe提供的一个免费服务器端组件,它允许Flex客户端与Java后端进行双向通信,实现了轻量级的远程方法调用(RPC)以及数据推送功能。Java是一种广泛使用的面向对象的编程语言,常用于构建服务器端应用。JMS...
现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class ...
Flex是Adobe公司开发的一种富互联网应用(RIA)开发框架,主要用于构建交互性强、用户体验...通过这种方式,你可以创建出动态、数据驱动的Web应用,提供丰富的用户体验,同时利用Java的强大功能和MySQL的稳定存储能力。
### Flex与Java实现通信——使用BlazeDS技术详解 #### 一、引言 随着互联网技术的不断发展,前端与后端之间的数据交换变得越来越频繁。Adobe Flex作为一种强大的RIA(Rich Internet Applications)技术,广泛应用...
在本文中,我们将深入探讨如何在Flex应用中调用SWF文件,并将其转换为特定的对象,而不仅仅是作为MovieClip处理。在Flex开发中,我们经常需要集成外部的SWF资源,例如库或自定义组件,这通常是通过ActionScript实现...
《Flex与Java整合教程——构建Simple OA自动化办公系统》 在现代企业信息化建设中,前端交互体验和后端强大处理能力的结合至关重要。Flex作为一款强大的富互联网应用程序(RIA)开发框架,以其丰富的用户界面和高效...
博文链接:https://hacker47.iteye.com/blog/182364
博文链接:https://hacker47.iteye.com/blog/182371
BlazeDS是Adobe公司发布的一个开源项目,它的主要功能是为Java服务器和Flex客户端提供实时的双向通信。通过使用BlazeDS,开发者可以在后台Java应用程序和前台Flex界面之间轻松地传递数据,实现远程服务调用(Remote ...