Flex批量上传通过Servlet

来源:互联网 发布:java 字节码增强 编辑:程序博客网 时间:2024/06/07 03:46

1.Servlet代码

package com.fpt.servlet;

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


public class FileUploadServlet extends HttpServlet {

 // 定义文件的上传路径

 private String uploadPath = "f:/";

 // 限制文件的上传大小

 private int maxPostSize = 100 * 1024 *1024;

 public FileUploadServlet() {
  super();
 }

 public void destroy() {
  super.destroy();
 }

 protected voidprocessRequest(HttpServletRequest request,
   HttpServletResponseresponse) throws ServletException, IOException {
  System.out.println("Access!");
  //uploadPath=request.getSession().getServletContext().getRealPath("");
  System.out.println(uploadPath);
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out =response.getWriter();

  //保存文件到服务器中

  DiskFileItemFactory factory= new DiskFileItemFactory();
  factory.setSizeThreshold(4096);
  ServletFileUpload upload = newServletFileUpload(factory);
  upload.setSizeMax(maxPostSize);
  try {
   ListfileItems = upload.parseRequest(request);
   Iterator iter= fileItems.iterator();
   while(iter.hasNext()) {
    FileItemitem = (FileItem) iter.next();
    if(!item.isFormField()) {
     Stringname = item.getName();
     System.out.println(name);
     try{
      item.write(newFile(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-folddefaultstate="collapsed"
 // desc="HttpServlet methods. Click on the + signon the left to edit the code.">

 protected void doGet(HttpServletRequestrequest,
   HttpServletResponseresponse) throws ServletException, IOException {
  processRequest(request,response);
 }

 protected void doPost(HttpServletRequestrequest,
   HttpServletResponseresponse) throws ServletException, IOException {
  processRequest(request,response);
 }

 
 public String getServletInfo() {
  return "file upload";
 }

}
2.flex上传组件

<?xml version="1.0"encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"  isPopUp="true"
   layout="vertical" width="100%" minWidth="400" height="100%"minHeight="200"
   title="上传页面"creationComplete="initCom()">
 
 <mx:Metadata>
  [Event(name="uploadComplete",type="flash.events.Event")]
  [Event(name="uploadProgress",type="flash.events.ProgressEvent")]
  [Event(name="uploadCancel",type="flash.events.Event")]
  [Event(name="uploadIOError",type="flash.events.IOErrorEvent")]
  [Event(name="uploadSecurityError",type="flash.events.SecurityErrorEvent")]
 </mx:Metadata>
 
 <mx:Script>
  <![CDATA[
   
   
   
   importmx.controls.*;
   importmx.managers.*;
   importmx.events.*;
   importflash.events.*;
   importflash.net.*;
   
   private var_strUploadUrl:String;
   private var_refAddFiles:FileReferenceList;   
   private var_refUploadFile:FileReference;
   private var_arrUploadFiles:Array;
   private var_numCurrentUpload:Number =0;           
   
   // SetuploadUrl
   publicfunction set uploadUrl(strUploadUrl:String):void {
    _strUploadUrl= strUploadUrl;
   }
   
   //Initalize
   privatefunction initCom():void {
    _arrUploadFiles= newArray();               
    enableUI();
    uploadCheck();
   }
   
   // Called toadd file(s) for upload
   privatefunction addFiles():void {
    _refAddFiles= new FileReferenceList();
    _refAddFiles.addEventListener(Event.SELECT,onSelectFile);
    _refAddFiles.browse();
   }
   
   // Calledwhen a file is selected
   privatefunction onSelectFile(event:Event):void {
    vararrFoundList:Array = new Array();
    //Get list of files from fileList, make list of files already onupload list
    for(var i:Number = 0; i < _arrUploadFiles.length; i++){
     for(var j:Number = 0; j < _refAddFiles.fileList.length;j++) {
      if(_arrUploadFiles[i].name == _refAddFiles.fileList[j].name) {
       arrFoundList.push(_refAddFiles.fileList[j].name);
       _refAddFiles.fileList.splice(j,1);
       j--;
      }
     }
    }
    if(_refAddFiles.fileList.length >= 1){               
     for(var k:Number = 0; k < _refAddFiles.fileList.length;k++) {
      _arrUploadFiles.push({
       name:_refAddFiles.fileList[k].name,
       size:formatFileSize(_refAddFiles.fileList[k].size),
       file:_refAddFiles.fileList[k]});
     }
     listFiles.dataProvider= _arrUploadFiles;
     listFiles.selectedIndex= _arrUploadFiles.length - 1;
                  
    if(arrFoundList.length >= 1) {
     Alert.show("Thefile(s): \n\n? " + arrFoundList.join("\n? ") + "\n\n...are alreadyon the upload list. Please change the filename(s) or pick adifferent file.", "File(s) already on list");
    }
    updateProgBar();
    scrollFiles();
    uploadCheck();
   }
   
   // Called toformat number to file size
   privatefunction formatFileSize(numSize:Number):String {
    varstrReturn: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");
     }
                  
    returnstrReturn;
   }
   
   // Called toremove selected file(s) for upload
   privatefunction removeFiles():void {
    vararrSelected:Array = listFiles.selectedIndices;
    if(arrSelected.length >= 1) {
     for(var i:Number = 0; i < arrSelected.length; i++){
      _arrUploadFiles[Number(arrSelected[i])]= null;
     }
     for(var j:Number = 0; j < _arrUploadFiles.length; j++){
      if(_arrUploadFiles[j] == null) {
       _arrUploadFiles.splice(j,1);
       j--;
      }
     }
     listFiles.dataProvider= _arrUploadFiles;
     listFiles.selectedIndex=0;                   
    }
    updateProgBar();
    scrollFiles();
    uploadCheck();
   }
   
   // Called tocheck if there is at least one file to upload
   privatefunction uploadCheck():void {
    if(_arrUploadFiles.length == 0) {
     btnUpload.enabled= false;
     listFiles.verticalScrollPolicy= "off";
    }else {
     btnUpload.enabled= true;
     listFiles.verticalScrollPolicy= "on";
    }
   }
   
   // Disable UIcontrol
   privatefunction disableUI():void {
    btnAdd.enabled= false;
    btnRemove.enabled= false;
    btnUpload.enabled= false;
    btnCancel.enabled= true;
    listFiles.enabled= false;
    listFiles.verticalScrollPolicy= "off";
   }
   
   // Enable UIcontrol
   privatefunction enableUI():void {
    btnAdd.enabled= true;
    btnRemove.enabled= true;
    btnUpload.enabled= true;
    btnCancel.enabled= false;
    listFiles.enabled= true;
    listFiles.verticalScrollPolicy= "on";
   }
   
   // ScrolllistFiles to selected row
   privatefunction scrollFiles():void {
    listFiles.verticalScrollPosition= listFiles.selectedIndex;
    listFiles.validateNow();
   }
   
   // Called toupload file based on current upload number
   privatefunction startUpload():void {
    if(_arrUploadFiles.length > 0) {
     disableUI();
     
     listFiles.selectedIndex= _numCurrentUpload;
     scrollFiles();
     
     //Variables to send along with upload
     varsendVars:URLVariables = new URLVariables();
     sendVars.action= "upload";
     
     varrequest:URLRequest = new URLRequest();
     request.data= sendVars;
     request.url= _strUploadUrl;
     request.method= URLRequestMethod.POST;
     _refUploadFile= new FileReference();
     _refUploadFile= listFiles.selectedItem.file;
     _refUploadFile.addEventListener(ProgressEvent.PROGRESS,onUploadProgress);
     _refUploadFile.addEventListener(Event.COMPLETE,onUploadComplete);
     _refUploadFile.addEventListener(IOErrorEvent.IO_ERROR,onUploadIoError);
     _refUploadFile.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onUploadSecurityError);
     _refUploadFile.upload(request,"file", false);
    }
   }
   
   // Cancel andclear eventlisteners on last upload
   privatefunction clearUpload():void {
    _refUploadFile.removeEventListener(ProgressEvent.PROGRESS,onUploadProgress);
    _refUploadFile.removeEventListener(Event.COMPLETE,onUploadComplete);
    _refUploadFile.removeEventListener(IOErrorEvent.IO_ERROR,onUploadIoError);
    _refUploadFile.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,onUploadSecurityError);
    _refUploadFile.cancel();
    _numCurrentUpload= 0;
    updateProgBar();
    enableUI();
   }
   
   // Called onupload cancel
   privatefunction onUploadCanceled():void {
    clearUpload();
    dispatchEvent(newEvent("uploadCancel"));
   }
   
   // Get uploadprogress
   privatefunction onUploadProgress(event:ProgressEvent):void {
    varnumPerc:Number = Math.round((event.bytesLoaded / event.bytesTotal)* 100);
    updateProgBar(numPerc);
    varevt:ProgressEvent = new ProgressEvent("uploadProgress", false,false, event.bytesLoaded, event.bytesTotal);
    dispatchEvent(evt);
   }
   
   // UpdateprogBar
   privatefunction updateProgBar(numPerc:Number = 0):void {
    varstrLabel:String = (_numCurrentUpload + 1) + "/" +_arrUploadFiles.length;
    strLabel= (_numCurrentUpload + 1 <= _arrUploadFiles.length&& numPerc > 0&& numPerc < 100) ?numPerc + "% - " + strLabel : strLabel;
    strLabel= (_numCurrentUpload + 1 == _arrUploadFiles.length&& numPerc == 100) ? "UploadComplete - " + strLabel : strLabel;
    strLabel= (_arrUploadFiles.length == 0) ? "" : strLabel;
    progBar.label= strLabel;
    progBar.setProgress(numPerc,100);
    progBar.validateNow();
   }
   
   // Called onupload complete
   privatefunction onUploadComplete(event:Event):void {
    _numCurrentUpload++;               
    if(_numCurrentUpload < _arrUploadFiles.length) {
     startUpload();
    }else {
     enableUI();
     clearUpload();
     dispatchEvent(newEvent("uploadComplete"));
    }
   }
   
   // Called onupload io error
   privatefunction onUploadIoError(event:IOErrorEvent):void {
    clearUpload();
    varevt:IOErrorEvent = new IOErrorEvent("uploadIoError", false, false,event.text);
    dispatchEvent(evt);
   }
   
   // Called onupload security error
   privatefunctiononUploadSecurityError(event:SecurityErrorEvent):void {
    clearUpload();
    varevt:SecurityErrorEvent = newSecurityErrorEvent("uploadSecurityError", false, false,event.text);
    dispatchEvent(evt);
   }
   
   // Changeview state
   privatefunction changeView():void {
    currentState= (currentState == "mini") ? "" : "mini";
   }
   
  ]]>
 </mx:Script>
 
 <mx:states>
  <mx:Statename="mini">
   <mx:SetPropertyname="height" value="60"/>
   <mx:SetPropertyname="minHeight" value="60"/>
   <mx:SetStyletarget="{btnView}" name="icon"value="@Embed(&apos;imgs/icons/upload/application_put.png&apos;)"/>
  </mx:State>
 </mx:states>
 
 <mx:transitions>
  <mx:TransitionfromState="*" toState="*">
   <mx:Resizetarget="{this}" duration="1000"/>
  </mx:Transition>
 </mx:transitions>
 
 <mx:Canvas width="100%"height="100%">
  <mx:DataGridid="listFiles" left="0" top="0" bottom="0" right="0"
     allowMultipleSelection="true" verticalScrollPolicy="on"
     draggableColumns="false" resizableColumns="false"sortableColumns="false">
   <mx:columns>
    <mx:DataGridColumnheaderText="页面名称" dataField="name"wordWrap="true"/>
    <mx:DataGridColumnheaderText="页面大小" dataField="size"width="75"/>
   </mx:columns>
  </mx:DataGrid>
 </mx:Canvas>
 <mx:ControlBarhorizontalAlign="center"verticalAlign="middle">
  <mx:Buttonid="btnAdd" toolTip="Add file(s)" click="addFiles()"icon="@Embed(&apos;imgs/icons/upload/add.png&apos;)"width="26"/>
  <mx:Buttonid="btnRemove" toolTip="Remove file(s)" click="removeFiles()"icon="@Embed(&apos;imgs/icons/upload/delete.png&apos;)"width="26"/>
  <mx:ProgressBarid="progBar" mode="manual" label="" labelPlacement="center"width="100%"/>
  <mx:Buttonid="btnCancel" toolTip="Cancel upload"icon="@Embed(&apos;imgs/icons/upload/cancel2.png&apos;)"width="26" click="onUploadCanceled()"/>
  <mx:Buttonlabel="上传" toolTip="Upload file(s)" id="btnUpload"click="startUpload()"icon="@Embed(&apos;imgs/icons/upload/bullet_go.png&apos;)"/>
  <mx:Buttonid="btnView" toolTip="Show/Hide file(s)"icon="@Embed(&apos;imgs/icons/upload/application_get.png&apos;)"width="26" click="changeView()"/>
 </mx:ControlBar>   
</mx:Panel>
3.flex主程序

<application>

<script>

//上传文件相关变量
   private const_strDomain:String = new String("http://192.168.1.99/");
   //privateconst _strUploadScript:String = new String(_strDomain +"files/FileUpload/upload.php");
   private const_strUploadScript:String = new String("http://192.168.1.99:8080/fpt/fileupload");

Security.allowDomain(_strDomain); //安全设置

</script>

 <!--上传子页面-->
    <upload:FileUpload
     width="411"height="170"
     uploadUrl="{_strUploadScript}"
     uploadComplete="Alert.show(&apos;File(s)have been uploaded.&apos;,&apos;Uploadsuccessful&apos;)"
     uploadIOError="Alert.show(&apos;IOError in uploading file.&apos;,&apos;Error&apos;)"
     uploadSecurityError="Alert.show(&apos;SecurityError in uploading file.&apos;,&apos;Error&apos;)" x="562"y="39"/>    

</application>

原创粉丝点击