Flex上传大文件最佳解决方案是????? 500M以上我程序用的是flex +java有 有什么建议的

解决方案 »

  1.   

    上传速度怎么样啊 500M一般要多长时间,能说的详细点吗 或者能共享个demo吗
      

  2.   

    就是通过flex加Struts或者servlet实现的啊
    Mp3Load.mxml:<?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="12" 
    borderColor="#000000" headerHeight="25" color="#ffffff" creationComplete="init();"
    showCloseButton="true" close="closewindow()" 
    title="告警声音文件上传" backgroundAlpha="0.50" backgroundColor="#000000" 
        verticalScrollPolicy="off" horizontalScrollPolicy="off">
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
    <mx:Script>
    <![CDATA[
    import mx.managers.PopUpManager;
    import flash.net.FileReference;
    import mx.controls.Alert;
    import mx.events.CloseEvent;
    import flash.events.*;private var file: FileReference;private function init(): void{
    Security.allowDomain("*");
    file = new FileReference();
    file.addEventListener(ProgressEvent.PROGRESS, onProgress);
    file.addEventListener(Event.SELECT, onSelect);
    file.addEventListener(Event.COMPLETE, completeHandle);
    }
    private function closewindow():void{
    PopUpManager.removePopUp(this);
    }
    private function completeHandle(event:Event):void{
        Alert.show("上传成功!");
        PopUpManager.removePopUp(this);
    }private function upload(): void{
    try{
    var imageTypes:FileFilter = new FileFilter("Mp3 (*.mp3)", "*.mp3");
    var allTypes:Array = new Array(imageTypes);
    file.browse(allTypes);
    // file.browse();
    }catch(error:Error){
    Alert.show("一次只能打开一个文件浏览!");
    return;
    }
    }
    private function onSelect(e: Event): void{
    Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
    "确认上传",
    Alert.YES|Alert.NO,
    null,
    proceedWithUpload);
    }private function onProgress(e: ProgressEvent): void{
    lbProgress.text = " 已上传 " + e.bytesLoaded
    + " 字节,共 " + e.bytesTotal + " 字节";
    var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
    bar.setProgress(proc, 100);
    bar.label= "当前进度: " + " " + proc + "%";
    }private function proceedWithUpload(e: CloseEvent): void{
    if (e.detail == Alert.YES){
    var request: URLRequest = new URLRequest("FileUploadMp3?fileName="+file.name);
    try {
    file.upload(request);
    } catch (error:Error) {
    trace("上传失败");
    }
    }
    }
    ]]>
    </mx:Script>
    <mx:VBox width="100%" horizontalAlign="center">
    <mx:Label id="lbProgress" text="上传"/>
    <mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
    minimum="0" visible="true" maximum="100" label="当前进度: 0%"
    direction="right" mode="manual" width="200"/><mx:Button label="上传文件" click="upload();"/>
    </mx:VBox></mx:Canvas>
    </mx:TitleWindow>
      

  3.   

    FileUploadMp3是一个servlet 写的有点乱 见笑
    package com.zznode.gixpert.groupnorms.action;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.Reader;
    import java.io.UnsupportedEncodingException;
    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;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;/**
     *
     * @author qixiaoran 转载于网络 http://blog.csdn.net/meteorlWJ/archive/2008/06/01/2450234.aspx
     */
    public class FileUploadServlet extends HttpServlet {    /** 
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
         * @param request servlet request
         * @param response servlet response
         */
     // 限制文件的上传大小
        private int maxPostSize = 100 * 1024 * 1024;    public FileUploadServlet() {
            super();
        }    public void destroy() {
            super.destroy();
        }    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
           //得到传递过来的文件名
            String filename = charChange(request.getParameter("fileName"));
            String uname =  System.currentTimeMillis()+".mp3"; //取一个随机数作为上传文件的文件名避开中文文件名乱码的可能性
            //得到当前tomcat的路径
            String tomcaturi = request.getSession().getServletContext().getRealPath("");
            // 定义文件的上传路径
            String uploadPath = ""; 
             if(System.getProperty( "os.name").indexOf("Windows") != -1){
             uploadPath = tomcaturi+"\\resources\\mv\\"+uname;
         }else{
         uploadPath = tomcaturi+"/resources/mv/"+uname;
         }
                     //保存文件到服务器中
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(4096);
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setSizeMax(maxPostSize);
            try {
                List fileItems = upload.parseRequest(request);
                Iterator iter = fileItems.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (!item.isFormField()) {                   
                        try {
                            item.write(new File(uploadPath));
                        //    item.write(new File(tomcaturi+"\\gixpertflex-sx\\resources\\mv\\"+filename));
                           
                            if(System.getProperty( "os.name").indexOf("Windows") != -1){
                             modiXMLFile(tomcaturi+"\\flexconfig\\groupnorms\\playlist.xml", tomcaturi+"\\flexconfig\\groupnorms\\playlist.xml",
                                 filename, "resources\\mv\\"+uname);
                     }else{
                     modiXMLFile(tomcaturi+"/flexconfig/groupnorms/playlist.xml", tomcaturi+"/flexconfig/groupnorms/playlist.xml",
                                 filename, "resources/mv/"+uname);
                     }
                        
                            
                            
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
                       }
        }    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /** 
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        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";
        }
        /**   
     * 字符串内码转换 GB2312 to iso8859-1
     */
    public String charChange(String ori) {
    if (ori == null || ori.length() == 0) {
    return "";
    }
    String newstr = "";
    try {
    newstr = new String(ori.getBytes("ISO-8859-1"));
    return newstr;
    } catch (Exception e) {
    e.printStackTrace();
    return newstr;
    }
    }
    /** * 修改XML文件中内容,并另存为一个新文件 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件

    * @param title 声音文件描述
      
    * @param mp3url 上传的文件存放的地址 * @return 返回操作结果, 0表失败, 1表成功 */
    private int modiXMLFile(String filename,String newfilename,String title,String mp3url){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); 

    FileInputStream in = new FileInputStream(new File(filename)); Document document = saxReader.read(createReader(in,"utf-8")); /** 修改内容之一: 如果sound节点中sound参数的内容为true,则修改成false */ /** 先用xpath查找对象,将以前播放的声音文件标示置为false */

    List list = document.selectNodes("/playlist/sound" );  Iterator iter = list.iterator(); while(iter.hasNext()){
    Element ftpElement = (Element) iter.next();
    if (ftpElement.attribute("isuse").getValue().equals("true")) {
    ftpElement.attribute("isuse").setValue("false");

    }
    /** 将新增的声音文件增加到xml描述文件 **/
    list = document.selectNodes("/playlist"); iter = list.iterator(); if(iter.hasNext()){ Element ownerElement = (Element)iter.next(); Element soundElement = ownerElement.addElement("sound"); soundElement.addAttribute("title",title);

    mp3url = mp3url.replace("\\", "/");
    soundElement.addAttribute("source",mp3url);

    soundElement.addAttribute("isuse","true"); }

    /** 将document中的内容写入文件中,另存为的文件 */
    XMLWriter output = null; /** 格式化输出,类型IE浏览一样 */ OutputFormat format = OutputFormat.createPrettyPrint(); /** 指定XML字符集编码 */ format.setEncoding("utf-8");

    output = new XMLWriter(new OutputStreamWriter(new java.io.FileOutputStream(filename),"UTF-8"),format); output.write(document); output.close();    output = new XMLWriter(new OutputStreamWriter(new java.io.FileOutputStream(newfilename),"UTF-8"),format); output.write(document); output.close();  /** 执行成功,需返回1 */ returnValue = 1;

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

    }
    return returnValue;
    }
    protected Reader createReader(InputStream inputStream, String encoding) {
    try{
    return new BufferedReader(
    new InputStreamReader(inputStream,encoding)
    );
    }
    catch(Exception uee){
     uee.printStackTrace();
     
    }
     
    return null;
    }
     

    }
      

  4.   

     上传速度我想应该体现在后台java的处理上,可以再java上着手寻求最佳方案,flex上传就那么两种方式
      

  5.   

    Error: No class registered for interface 'mx.styles::IStyleManager2'.
    at mx.core::Singleton$/getInstance()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Singleton.as:111]
    at mx.styles::StyleManager$/get impl()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\styles\StyleManager.as:78]
    at mx.styles::StyleManager$/http://www.adobe.com/2006/flex/mx/internal::initProtoChainRoots()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\styles\StyleManager.as:144]
    at Mp3Load/http://www.adobe.com/2006/flex/mx/internal::_Mp3Load_StylesInit()[D:\workspace\flextest\flex_src\Mp3Load.mxml:0]
    at Mp3Load()[D:\workspace\flextest\flex_src\Mp3Load.mxml:0]
    是不是有什么文件没发给出来啊  打开报错
      

  6.   

    flex 写的很简单的啊,你直接拷贝过去用的?
      

  7.   

    可能是sdk版本不一样,把样式什么的都去掉
      

  8.   

    在Appliction里面<mx:Button click="uplode(event)" />  
     //点击上传
        private function uplode(e:Event):void{
    var win:Mp3Upload =Mp3Upload(PopUpManager.createPopUp(this,Mp3Upload,true));
    PopUpManager.centerPopUp(win);
    }