我正在使用文件类型的幻数十六进制值检查mime类型验证,但是它无法正常工作,即使文件具有正确的十六进制值作为标头也无法检查并返回错误的警报消息。

以下是代码中的详细信息:





jQuery(document).ready(function() {
    jQuery.fn.hasMimetype = function(ctrl) {
         try {
          ctrl.value = null;
         } catch(ex) { }
         if (ctrl.value) {
          ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
         }
        }

    const fileSelector2 = document.getElementById('file')

        jQuery('#file').change(function(event) {


            const file = event.target.files[0]
            //alert(file.type);
            const filereader = new FileReader()

            filereader.onloadend = function(evt) {
            var header2 = "";

                var arr = (new Uint8Array(evt.target.result)).subarray(0, 4);
                for(var i = 0; i < arr.length; i++) {
                header2 += arr[i].toString(16);

            }
                if(header2 !=='d0cf11e0' || header2 !=='504b34'){
                 alert(header2);
                 alert("only doc/docx files are supported");
                $('#file').hasMimetype(fileSelector2);
                }
          }

            filereader.readAsArrayBuffer(file);
        });
      });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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

最佳答案

不管header2的值如何,这始终是正确的:

if(header2 !=='d0cf11e0' || header2 !=='504b34')


您可能想要这样:

if(header2 !=='d0cf11e0' && header2 !=='504b34')

关于javascript - 文件十六进制值检查不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48340710/

10-16 19:20