【问题标题】:jquery - Check for file extension before uploadingjquery - 在上传之前检查文件扩展名
【发布时间】:2013-01-28 21:54:27
【问题描述】:

我正在使用 uploadify 通过 Codeigniter 上传文件。在上传文件之前,我只需要检查文件扩展名是否正确。我试过http://jquery.bassistance.de/ 和http://forum.jquery.com/

Bur 没有得到正确的结果。谁能告诉我我该怎么做?

提前谢谢...

【问题讨论】:

标签: jquery


【解决方案1】:

您可以使用 JQuery 实现此目的

HTML

 <input type="file" id="FilUploader" />

JQuery

    $("#FilUploader").change(function () {
        var fileExtension = ['jpeg', 'jpg', 'png', 'gif', 'bmp'];
        if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) {
            alert("Only formats are allowed : "+fileExtension.join(', '));
        }
    });

欲了解更多信息Click Here

【讨论】:

  • @FelipeLeão 这就是pop()的意思,把最后一个元素从数组中取出来。
  • alert之后可以用$(this).val('');清除输入值-- 效果很好。
【解决方案2】:

如果您想在没有插件的情况下执行此操作,可以使用以下内容。

Javascript,使用 jQuery:

$(document).ready( function (){
    $("#your_form").submit( function(submitEvent) {

        // get the file name, possibly with path (depends on browser)
        var filename = $("#file_input").val();

        // Use a regular expression to trim everything before final dot
        var extension = filename.replace(/^.*\./, '');

        // Iff there is no dot anywhere in filename, we would have extension == filename,
        // so we account for this possibility now
        if (extension == filename) {
            extension = '';
        } else {
            // if there is an extension, we convert to lower case
            // (N.B. this conversion will not effect the value of the extension
            // on the file upload.)
            extension = extension.toLowerCase();
        }

        switch (extension) {
            case 'jpg':
            case 'jpeg':
            case 'png':
                alert("it's got an extension which suggests it's a PNG or JPG image (but N.B. that's only its name, so let's be sure that we, say, check the mime-type server-side!)");

            // uncomment the next line to allow the form to submitted in this case:
//          break;

            default:
                // Cancel the form submission
                submitEvent.preventDefault();
        }

  });
});

HTML:

<form id="your_form" method="post" enctype="multipart/form-data">
    <input id="file_input" type="file" />
    <input type="submit">
</form>

【讨论】:

    【解决方案3】:

    我要感谢发布答案的人,但他已删除该帖子。我们可以这样做。

    $("#yourElem").uploadify({
       'uploader': ...,
       'script': ...
        'fileExt' : '*.jpg;*.gif;', //add allowed extensions
        .....,
        'onSelect': function(e, q, f) {
            var validExtensions = ['jpg','gif']; //array of valid extensions
            var fileName = f.name;
            var fileNameExt = fileName.substr(fileName.lastIndexOf('.') + 1);
            if ($.inArray(fileNameExt, validExtensions) == -1){
               alert("Invalid file type");
               $("#yourElem").uploadifyCancel(q);
               return false;
            }
        }
    });
    

    感谢您的回答,它确实有效...

    【讨论】:

    • 简单实用。谢谢。
    【解决方案4】:

    这是一个简单的 javascript 验证代码,验证后会清理输入文件。

    <input type="file" id="image" accept="image/*" onChange="validate(this.value)"/>
    
    function validate(file) {
        var ext = file.split(".");
        ext = ext[ext.length-1].toLowerCase();      
        var arrayExtensions = ["jpg" , "jpeg", "png", "bmp", "gif"];
    
        if (arrayExtensions.lastIndexOf(ext) == -1) {
            alert("Wrong extension type.");
            $("#image").val("");
        }
    }
    

    【讨论】:

      【解决方案5】:
      <!DOCTYPE html>
          <html>
            <head>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <script>
               jQuery(document).ready(function(){
                     jQuery('.form-file input').each(function () {
                           $this = jQuery(this);
                                $this.on('change', function() {
                                     var fsize = $this[0].files[0].size,
                                         ftype = $this[0].files[0].type,
                                         fname = $this[0].files[0].name,
                                         fextension = fname.substring(fname.lastIndexOf('.')+1);
                                         validExtensions = ["jpg","pdf","jpeg","gif","png","doc","docx","xls","xlsx","ppt","pptx","txt","zip","rar","gzip"];
      
                                      if ($.inArray(fextension, validExtensions) == -1){
                                          alert("This type of files are not allowed!");
                                          this.value = "";
                                          return false;
                                      }else{
                                          if(fsize > 3145728){/*1048576-1MB(You can change the size as you want)*/
                                              alert("File size too large! Please upload less than 3MB");
                                              this.value = "";
                                              return false;
                                          }
                                          return true;
                                     }
      
                               });
                   });
             });
          </script>
          </head>
      
      <body>
          <form>
                <div class="form-file">
                     <label for="file-upload" class="from-label">File Upload</label>
                     <input class="form-control" name="file-upload" id="file-upload" type="file">
                </div>
          </form>
      </body>
      
      </html>
      

      这是检查文件大小和文件扩展名的完整答案。这使用了默认文件输入字段和 jQuery 库。 工作示例:https://jsfiddle.net/9pfjq6zr/2/

      【讨论】:

        【解决方案6】:
         $("#file-upload").change(function () {
        
            var validExtensions = ["jpg","pdf","jpeg","gif","png"]
            var file = $(this).val().split('.').pop();
            if (validExtensions.indexOf(file) == -1) {
                alert("Only formats are allowed : "+validExtensions.join(', '));
            }
        
        });
        

        【讨论】:

          【解决方案7】:

          以下代码允许上传 gif、png、jpg、jpeg 和 bmp 文件。

          var extension = $('#your_file_id').val().split('.').pop().toLowerCase();
          
          if($.inArray(extension, ['gif','png','jpg','jpeg','bmp']) == -1) {
              alert('Sorry, invalid extension.');
              return false;
          }
          

          【讨论】:

            【解决方案8】:

            如果不想使用$(this).val(),可以试试:

            var file_onchange = function () {
              var input = this; // avoid using 'this' directly
            
              if (input.files && input.files[0]) {
                var type = input.files[0].type; // image/jpg, image/png, image/jpeg...
            
                // allow jpg, png, jpeg, bmp, gif, ico
                var type_reg = /^image\/(jpg|png|jpeg|bmp|gif|ico)$/;
            
                if (type_reg.test(type)) {
                  // file is ready to upload
                } else {
                  alert('This file type is unsupported.');
                }
              }
            };
            
            $('#file').on('change', file_onchange);
            

            希望这会有所帮助!

            【讨论】:

              【解决方案9】:
                      function yourfunctionName() {
                          var yourFileName = $("#yourinputfieldis").val();
              
                          var yourFileExtension = yourFileName .replace(/^.*\./, '');
                          switch (yourFileExtension ) {
                              case 'pdf':
                              case 'jpg':
                              case 'doc':
                                  $("#formId").submit();// your condition what you want to do
                                  break;
                              default:
                                  alert('your File extension is wrong.');
                                  this.value = '';
                          }    
                      }
              

              【讨论】:

                猜你喜欢
                • 2021-07-13
                • 1970-01-01
                • 2021-12-23
                • 2015-04-21
                • 1970-01-01
                • 2011-07-12
                • 2017-06-04
                • 1970-01-01
                • 2017-07-28
                相关资源
                最近更新 更多