`
lichen0921
  • 浏览: 79730 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

flex多文件带进度条上传

    博客分类:
  • flex
阅读更多
 
 
这个我做的是弹出的TitleWindow
主页代码简单,就是一个按钮
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"    
            xmlns:s="library://ns.adobe.com/flex/spark"    
            xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
  <s:layout>
    <s:BasicLayout/>
  </s:layout>
  <fx:Script>
    <![CDATA[
      import com.lichen.component.upload;
      import mx.managers.PopUpManager;
      protected function button1_clickHandler(event:MouseEvent):void
      {
        var win:upload=upload(PopUpManager.createPopUp(this,upload,true));
        PopUpManager.centerPopUp(win);
      }
    ]]>
  </fx:Script>
  <s:Button x="36" y="47" label="按钮" click="button1_clickHandler(event)"/>
</s:Application>
 
弹出的TitleWindow是核心
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo"    layout="absolute" title="上传文件" color="#7dbded"
        width="609" height="460" baseColor="#E0ECFF" borderColor="#E0ECFF" backgroundColor="haloBlue" backgroundAlpha="0.1" contentBackgroundAlpha="0.1"
        borderVisible="true" dropShadowVisible="true"    
        showCloseButton="true" close="PopUpManager.removePopUp(this)"
         fontFamily="Arial" fontSize="14" fontWeight="bold" verticalAlign="top" initialize="init();">
  <fx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.controls.Alert;
      import mx.controls.ProgressBar;
      import mx.managers.PopUpManager;
        
      private var fileList:FileReferenceList = new FileReferenceList();  //多选文件的list
      private var urlRequest:URLRequest = new URLRequest("http://192.168.1.205:9218/productshowshow/upload");    //处理文件上传的servlet
      [Bindable]
      public var selectedFiles: ArrayCollection = new ArrayCollection([]);    //多选的文件分离成文件数组
      private var fileListSize:uint=1;
      /**
        * 初始化
        */
      public function init():void{
        fileList.addEventListener(Event.SELECT,fileSelectHandler);
      }
      /**
        *监听文件选择的处理函数
        */
      private function fileSelectHandler(event: Event): void
      {
        if(fileList.fileList.length>10){
          Alert.show("一次最多只能上传10个文件");
        }else{
          for(var i:int=0;i<fileList.fileList.length;i++){
            var f:FileReference = FileReference(fileList.fileList[i]);    
            var obj:Object= new Object();
            obj.fileName = f.name;
            obj.fileSize = f.size/1024;
            obj.fileType = f.type;
            obj.fileRefrence = f;
            fileListSize+=f.size;
            selectedFiles.addItem(obj);
          }
          if( fileListSize/(1024*1024)>100 ){
            selectedFiles.removeAll();
            Alert.show("文件总大小应小于100M");
          }
        }
//        for each (var file: FileReference in fileList.fileList)
//        {
//          selectedFiles.addItem(file);
//        }
      }
      /**
        * 点击"浏览"按钮-->选择文件
        */
      protected function selectFile():void
      {
        //浏览文件,因为是FileReferenceList所以可以多选. 并用FileFilter过滤文件类型.
        fileList.browse([new FileFilter("图片文件 (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png"),new FileFilter("所有文件 (*.*)","*.*")]);
      }
      /**
        * 逐个上传文件
        */
      private function uploadHandler(event:MouseEvent):void{
        var file:FileReference;
        for(var i:int = 0 ;i<selectedFiles.length;i++){
          file = FileReference(selectedFiles[i].fileRefrence);
          file.upload(urlRequest);
        }
      }
      /**
        * 上传一个文件,监听文件上传完成事件,递归调用.
        */
      private function doSingleUploadFile():void{
        if(selectedFiles.length>10){
          selectedFiles.removeAll();
          Alert.show("一次最多只能上传10个文件");
        }else if( fileListSize/(1024*1024)>100 ){
          selectedFiles.removeAll();
          Alert.show("文件总大小应小于100M");
        }else{
          if (fileList.fileList.length > 0){
            var f: FileReference = fileList.fileList.shift() as FileReference;
            f.addEventListener(Event.COMPLETE, doSingleUploadFileComplete);
            f.upload(urlRequest);
          }
        }
      }
      /**
        * 一个文件上传完成事件的处理函数,递归执行上传下一个文件.
        */
      private function doSingleUploadFileComplete(event: Event):void{
        var file: FileReference = event.target as FileReference;
        file.removeEventListener(Event.COMPLETE, doSingleUploadFileComplete);
        doSingleUploadFile();
      }
      public function removeFile(f: FileReference): void
      {
        var index: int = selectedFiles.getItemIndex(f);
        if (index != -1)
          selectedFiles.removeItemAt(index);
      }
        
    ]]>
  </fx:Script>
  <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
  </fx:Declarations>
  <mx:LinkButton x="10" y="23" textRollOverColor="purple" textSelectedColor="haloBlue"    label="选择本地文件" cornerRadius="7" fontFamily="中易宋体" fontSize="14" fontWeight="bold" fontStyle="normal" textDecoration="none" textAlign="center"
             click="selectFile()"/>
  <mx:DataGrid x="12" y="50" id="dg" width="587" height="291" color="#7dbded" contentBackgroundColor="#E0ECFF" baseColor="#E0ECFF"
        dataProvider="{selectedFiles}">
    <mx:columns>
      <mx:DataGridColumn headerText="文件名" dataField="fileName" width="150"/>
      <mx:DataGridColumn headerText="大小(kb)" dataField="fileSize" width="100"/>
      <mx:DataGridColumn headerText="类型" dataField="fileType" width="70"/>
      <mx:DataGridColumn headerText="上传状态" dataField=""    width="230">
        <mx:itemRenderer>
          <fx:Component>
            <mx:HBox width="130" paddingLeft="2" horizontalGap="2">
              <fx:Script>
                <![CDATA[
                  override public function set data(value:Object):void{
                    super.data = value;
                    data.fileRefrence.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                    data.fileRefrence.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fini);
                  }
                    
                  private function progressHandler(event:ProgressEvent):void{
//                    progress.setProgress(event.bytesLoaded,data.fileRefrence.size);
//                    Alert.show("hahah");
//                    progress.setProgress(event.bytesLoaded, event.bytesTotal);
                    var procent:uint=event.bytesLoaded/event.bytesTotal*100;
//                    progress.label=procent+"###";
//                    if(procent==100){
////                      progress.enabled=false;
//                      progress.label="完成啦";
//                    }
//                    data.fileRefrence.removeEventListener(ProgressEvent.PROGRESS,progressHandler);
                  }    
                    
                  public function fini(event: DataEvent):void{
                    progress.visible=true;
                    progress.label="完成";
                    data.fileRefrence.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fini);
                  }
                ]]>
              </fx:Script>
              <mx:ProgressBar id="progress" width="80%"    
                      minimum="0" maximum="100" source="{data.fileRefrence}"
                      labelPlacement="center" ><!--进度条显示文字    source="{data.fileRefrence}"    progress="progress.label='%3%%';"    label="%3%%"    -->
              </mx:ProgressBar>
              <!-- 取消按钮    source="{data.fileRefrence}"
              <mx:LinkButton width="20" toolTip="取消上传" click="cancel()"
              label="取消" icon="@Embed('image/cancel.png')">
              <fx:Script>
              <![CDATA[
              private function cancel():void{
              data.fileRefrence.cancel();
              progress.label = "已取消";
              }
              ]]>
              </fx:Script>
              </mx:LinkButton>
              
-->
        
              <!--
              <mx:LinkButton width="20" click="deleteItem(event)"    
                         toolTip="从列表中删除" icon="@Embed('image/delete.png')">
                <fx:Script>
                  <![CDATA[
                    import mx.collections.ArrayCollection;
                    
                    private function deleteItem(event:MouseEvent):void {
                        
                      var s:ArrayCollection= this.parentDocument.selectedFiles as ArrayCollection;    //取全局变量
                      var index:int=s.getItemIndex(data);
                      if (index != -1){
                        s.removeItemAt(index);
                      }
                    }
                  ]]>
                </fx:Script>
              </mx:LinkButton>
              
-->
            </mx:HBox>
          </fx:Component>
        </mx:itemRenderer>
      </mx:DataGridColumn>
    </mx:columns>
  </mx:DataGrid>
  <s:Button x="523" y="373" label="上传" id="btn_upload"    lineHeight="0"    
         click="doSingleUploadFile();" />
</mx:TitleWindow>
 
文件上传服务器端(Java)
package com.test;

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

public class UploadFile extends HttpServlet {    
        private static final long serialVersionUID = 5425836142860976977L;

        /** *//**    
            * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.    
            * @param request servlet request    
            * @param response servlet response    
            */
    
         // 定义文件的上传路径    
         private String uploadPath = "d:\\";    
         // 限制文件的上传大小    
         private int maxPostSize = 100 * 1024 * 1024;    //最大100M
         public UploadFile() {    
                 super();    
         }    
         public void destroy() {    
                 super.destroy();    
         }    
         protected void processRequest(HttpServletRequest request, HttpServletResponse response)    
                         throws ServletException, IOException {    
                 System.out.println("Access !");    
                 response.setContentType("text/html;charset=UTF-8");    
                 //保存文件到服务器中    
                 DiskFileItemFactory factory = new DiskFileItemFactory();    
                 factory.setSizeThreshold(4096);    
                 ServletFileUpload upload = new ServletFileUpload(factory);    
                 upload.setHeaderEncoding("utf-8");
                 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 = item.getName();
                                        System.out.println(name);    
                                        try {    
                                                item.write(new File(uploadPath + name));    
                                                response.getWriter().write("上传成功。");
                                        } catch (Exception e) {    
                                                e.printStackTrace();    
                                                response.getWriter().write(e.getMessage());
                                        }    
                                }    
                        }    
                } catch (FileUploadException e) {    
                        e.printStackTrace();    
                        response.getWriter().write(e.getMessage());
                        System.out.println(e.getMessage() + "结束");    
                }    
        }    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)    
                        throws ServletException, IOException {    
                processRequest(request, response);    
        }    
        /** *//**    
         * Handles the HTTP <code>POST</code> method.    
         * @param request servlet request    
         * @param response servlet response    
         */
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)    
                         throws ServletException, IOException {    
                 processRequest(request, response);    
         }    
         /** *//**    
            * Returns a short description of the servlet.    
            */
    
         public String getServletInfo() {    
                 return "Short description";    
         }    
}    


 
由于itemRenderer的问题,文件删除和DataGrid的滚动造成进度条进度错乱的问题都没能解决.不是很满意,但至少实现了基本的多文件带进度条上传.
分享到:
评论

相关推荐

    flex带进度条上传文件

    flex带进度条上传文件,非常棒,相信你会喜欢的。大家不要下载了,这个资源不知道为什么不能用了,请csdn的管理员关注一下。

    Flex 上传文件控件 (带java服务端)

    Flex 上传文件控件 (带java服务端) 可以设置多文件还是单文件 设置上传大小 显示上传进度条

    FLEX多文件上传

    FLEX多文件传。带进度条的提示。

    Flex文件上传的组件

    一个flex的文件上传组件,带进度条的。

    Flex+php 批量上传源码 (可刷新进度条 )

    可以正确刷新批量上传时进度条。 源码为学习用途。所以写得随便了一些。 请留意javascript 有Flex 回调函数。

    Flex文件上传工具类

    支持同时上传多个文件,和设置文件过滤 绑定进度条和用于显示进度信息的Text控件

    Flex文件上传下载

    1.Flex+java文件上传 2.限制上传大小 3.上传进度显示

    flash多文件批量上传(第一版)

    用flex3开发的多文件批量上传工具,实现文件批量上传,并带进度条; 通过JS设置可上传文件的扩展名、允许最大上传长度与接收文件的后台文件路径,通过修改上传页面的js代码设置,即可适用,适合所有上传应用的需求

    淘宝上价值380元的网站源代码打包 上传下载篇

    [上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.rar [上传下载]手机电影下载系统源码_56wam.rar [上传下载]桃源网络硬盘.Net 5.4_webdisk.rar [上传下载]桃源网络硬盘.Net v4.6_webdisk.rar ...

    FLASH批量上传文件第二版

    2、带进度条 3、通过配置JS文件,实现控制允许上传哪些文件、最大长度、接收文件的代码、获取已经上传文件的代码等等,经过简单修改就可以适合大部分应用,如下: //var fileType="*.wmv;*.rmvb;*.rar"; var ...

    Flex 利用socket断点续传

    flex利用socket进行文件断点续传,带进度条,本地代码能完整运行,Flash Builder 4 ,eclipse ,jdk1.6,java代码偶尔会报线程错误,但是不会影响上传功能

    大文件及文件夹上传(不错的程序)

    经过两天的研究实现了基本的功能。在安全性配置方面暂时的方案是将网站添加...ps:这两天也学了点flex,有哪位知道silverlight或者flex在form-auth方面是需要编码发送数据认证还是可以自动读取同域的cookie发送进行认证?

    Struts2使用FlashFileUpload.swf实现批量文件上传

    最近想在Struts2中实现批量上传(使用html的file标签时,一次只能选一个文件,我是想一下可以选多个文件),结果找了半天,大都是swf+ajax的,用起来太复杂了,代码也很繁多,实在没耐心了。 就想起FlashFileUpload...

    Flex 利用socket实现断点续传源码

    Flex 利用socket实现断点续传源码,有进度条,在本地代码可以完整运行,Flash Builder 4 ,eclipse ,jdk1.6,java代码偶尔会报线程错误,但是不会影响上传功能

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

Global site tag (gtag.js) - Google Analytics