zoukankan      html  css  js  c++  java
  • 结合MS Web Controls做文件上传的解决方案!

      目前的这个问题是这样的,要求文件上传前,对文件的下权限进行一些设定。由于文件上传一定要出现上传进度条,因此,文件上传的步骤就只能放到最后一步。而这样就不能满足要求:先对文件的下载权进行设定。我以前的解决方案是:

    1、选择上传文件的保存路径;
    2、选择上传文件;
    3、开始上传文件,显示上传进度条;
    4、根据已经上传的文件,对文件进行下载权限设定。
    5、完成。

    这个步骤看上去是很合理的,但中间有一个小问题就是,对于大文件上传时,第3步与第4步中间可能要等待很长时间。这样,老板要求重新选择顺序。

    1、选择上传文件的保存路径;
    2、选择上文件;
    3、选择用户下载文件,即下载权限设定;
    4、开始上传,显示上传进度条;
    5、显示完成信息。

    这是个很头痛的问题,因为一但选择了文件后,下一个动作就必须上传文件,否则所以的回调操作都将引发文件上传任务,而且就算你不显示上传进度条也一样的要等很长时间。这一问题我在Google的博客园里寻求过帮助,可没有好的解决方案。唯一可行的就是用JS在客户端实行大量的操作。

    正巧,昨天看到MS的博客也开通了,于是也申请了一个。发现它的信息更新就是在一个Page里,而且只有最后一个提交才进行数据更新,其它的都是在本地完成的。于是想起利用MS的Web Controls里的MultiPage来做这样的工作。

    这一套组件可以在MS的网站上下载到,而且MSDN上也有它使用的说明。但结于MultiPage的使用说的不多。特别是动态的添加页面,更是没有。只好自己做了。

    然而VS.net2003对这一组件的支持并不完美。最郁闷的是在MultiPage里添加ViewPage,只能在代码模式下添加,不能用设计视图。想办法,先在MultiPage外做好内容,然后Cut到MultiPage里去,结果郁闷的是,事件都没了!又只好自己手动的添加。。。郁闷。。。

    Multipage.JPG

    整个设计过程也并不难,但最郁闷的还是添加用户的下载权限,因为不能回调服务器函数,因此所有的功能都要在客户端完成。

    Multipage2.JPG
    这里最郁闷的是:User/Client及后面StartDate及EndDate的数据是在客户端用JS添加进去的,而当上传文件后,在服务器端取得不到这里面的数据。。。。。。

    因为这个原因,上次准备这样一个解决方案的时候就放弃了。
    然而,现在不得不完成这样的功能。怎么办???想到一个办法:就是隐藏一个文本框,然后添加数据,最后再恢复数据,结果JS代码一大堆:
    function AddNewUser(o_objUserName,i_objUserName,o_objStartDate,i_objStartDate,o_objEndDate,i_objEndDate,h_objUserID,h_objStartDate,h_objEndDate,h_objUserNames)
    {
        
    //window.status        = "Click the button.";
        //o_objUserName:                            Dropdown list
        //o_objEndDate,o_objStartDate:                Text box
        //i_objUserName,i_objEndDate,i_StartDate:    List box
        o_objUserName        = eval("document.all."+o_objUserName);
        o_objStartDate        
    = eval("document.all."+o_objStartDate);
        o_objEndDate        
    = eval("document.all."+o_objEndDate);
        i_objUserName        
    = eval("document.all."+i_objUserName);
        i_objStartDate        
    = eval("document.all."+i_objStartDate);
        i_objEndDate        
    = eval("document.all."+i_objEndDate);
        h_userID            
    = eval("document.all."+h_objUserID);
        h_startDate            
    = eval("document.all."+h_objStartDate);
        h_endDate            
    = eval("document.all."+h_objEndDate);
        h_userName            
    = eval("document.all."+h_objUserNames);
        
    //if(o_objStartDate.value==""||o_objEndDate.value=="")    return;    
        //window.status        = o_objStartDate.value;
        var m_nameValue        = o_objUserName.options[o_objUserName.selectedIndex].value;
        
    if(m_nameValue=="-1"||m_nameValue=="0")return;
        
    var m_nameText        = o_objUserName.options[o_objUserName.selectedIndex].text;
        
    var m_startDate        = o_objStartDate.value;
        
    var m_endDate        = o_objEndDate.value;
        
    var m_optionName    = new Option(m_nameText,m_nameValue,false,false);
        
    var m_optionStart    = new Option(m_startDate,m_startDate,false,false);
        
    var m_optionEnd        = new Option(m_endDate,m_endDate,false,false);
        i_objUserName.options[i_objUserName.length]        
    = m_optionName;
        i_objStartDate.options[i_objStartDate.length]    
    = m_optionStart;
        i_objEndDate.options[i_objEndDate.length]        
    = m_optionEnd;
        i_objUserName.size    
    = i_objUserName.length+1;
        i_objStartDate.size    
    = i_objStartDate.length+1;
        i_objEndDate.size    
    = i_objEndDate.length+1;
        
    //Set hiden data
        h_userID.value        += m_nameValue+"|";
        h_startDate.value    
    += m_startDate+"|";
        h_endDate.value        
    += m_endDate+"|";
        h_userName.value    
    += m_nameText+"|";
        
    }

    而在服务器上,为了恢复数据:
                Create UserIDs
    而这样的做法感觉又不是很安全,但也没办法了,先这么做着吧。
  • 相关阅读:
    09_传智播客iOS视频教程_@property
    08_传智播客iOS视频教程_点语法
    07_传智播客iOS视频教程_手动向对象发送SEL消息
    接软件开发项目,你需要知道这些!
    接软件开发项目,你需要知道这些!
    这些代码优化的方法,你都用过吗?
    这些代码优化的方法,你都用过吗?
    这些代码优化的方法,你都用过吗?
    顶级程序员和普通程序员在思维模式上的5个区别!
    顶级程序员和普通程序员在思维模式上的5个区别!
  • 原文地址:https://www.cnblogs.com/WuCountry/p/351548.html
Copyright © 2011-2022 走看看