目的:做个文件上传,使用struct2做的主功能
 跟网友们探讨下细节,我想实现的是
 1.只能要特定类型的文件
 2.文件最大有限制大家看看qq邮箱的“添加附件”功能,用户在添加后如果文件大小超过50m,会提示文件过大?这个怎么实现的? 不要告诉我用ajax,后台传过来的,这不是一般的题,由后台判断的话,得把File传过去,这个怎么传?所以这个由javascript判断所以简单了,即我要你们实现的功能是:1.在javascript里判断文件类型
2.在javascript里判断文件大小这个不可能用后台呀,假设用后台,你得把文件传到后台才能判断,这是不现实的!

解决方案 »

  1.   

    form表单在开始传递真实数据的时候,会先在request里面告诉服务器所需传输的数据的总大小. 服务器端判断一下,然后扔一个错误回来,终端就能处理了.
      

  2.   


    那样不美观呀,比方说我要求最大是50m,却传了个100G的,按你的意思是等这100G传递过去才能判断?那样浪费时间
      

  3.   

    javascript不用Ajax等技术与后台交互,不能取得文件大小;但取文件类型文件名是比较简单的,直接取file控件的value就行了。
      

  4.   


    不知楼主是否用过ApacheUpload等组件,如果上传文件大小超过设置的大小,在这个请求传递到后台的时候就抛异常了,错误就是超过大小。
      

  5.   


    正在用Uploadify,是基于flash,因为目前javascript好像不能得到文件大小
      

  6.   

    就得需要后台,否则不好实现,以下是以前做的一个,只适用于ie6,谁知道微软怎么想的,image.dynsrc到了其它版本就舍弃了,别的浏览器也没有这个。//判断文件类型与文件大小
    function getFileSize(self,filePath) { 
    var fileTypes = $("#_fileTypes").val();//允许上传的文件类型
    var fileMaxSize = $("#_fileMaxSize").val();
    var len = filePath.length;
    var fileType = filePath.substring(filePath.lastIndexOf(".") + 1, len);
    if(fileTypes.indexOf(fileType)<0){
    alert("选择的文件类型不支持");
    //self.select();
    //document.selection.clear();
    self.outerHTML=self.outerHTML;
    return;
    }
    var browser=navigator.appName;
    var b_version=navigator.appVersion;
    var version=b_version.split(";"); 
    var trim_Version=version[1].replace(/[ ]/g,""); 
    if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE7.0"){ 

    }else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0"){ 
    var image=new Image(); 
    image.dynsrc=filePath; 
    var fileSize = image.fileSize;
    if(fileSize > (fileMaxSize*1)){
    alert("文件大小不能超过允许的大小:"+((fileMaxSize*1)/(1024*1024))+"M");
    /**/
    //self.select();
    //document.selection.clear();
    self.outerHTML=self.outerHTML;
    return;
    }


      

  7.   

    客户端找个flash的,省去好多麻烦。
      

  8.   

    一般是用工具包在后台判断吧,我就用过这个org.apache.commons.fileupload:
    List<FileItem> files=upload.parseRequest(request);
    for(int i=0;i<files.size();i++){
    FileItem file=files.get(i);
    long size=file.getSize(); //文件大小
    }
      

  9.   

    服务器接收请求的文件,如果此文件的格式与要求的不匹配,或者大小不符合要求大小,就响应错误信息给客户端了,然后交给js处理。
    不要太依赖js了。
      

  10.   


    是我不表达得不清。
    我的做法是,前台用flash判断,后台也判断。
    前台必须判断是理由是:如果我要求文件最大是50m,却传了个100G的,如果只后台判断,是不是必须等100G传完了才能判断?
      

  11.   

    .net里面可以获取文件的大小,作了处理后才进行保存到服务器的。