【问题标题】:file hex value checking not working文件十六进制值检查不起作用
【发布时间】:2018-06-28 16:07:09
【问题描述】:

我正在检查 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" />

【问题讨论】:

  • 在我看来,随意将一些文本加粗不利于可读性。
  • 我在这里用粗体突出了核心问题
  • 那么它会产生什么十六进制字符串呢?实际字节数是多少?
  • 它为 doc 和 docx 文件返回 d0cf11e0 和 504b34 但如果我上传 doc 或 docx 文件,它仍然显示错误消息
  • 其实在我看来,适当的标点符号(句号、逗号)和大写(I,而不是i)会更容易阅读。

标签: javascript file validation mime-types filereader


【解决方案1】:

无论header2 的值如何,这始终是正确的:

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

你可能想要这个:

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

【讨论】:

  • ...简单的印刷错误...有用的答案,所以无论如何都要+1。
  • doc 或 docx 不能有 2 个相同的值,它只返回一个。你可以运行 sn-p
  • @RickHitchcock ... 仅当header2 是一个字符串,而不是某个恶意对象时。
  • 是的,如果我上传 doc 或 docx,它将只返回一个值,即 d0cf11e0 或 504b34,如果我将同时尝试这两种情况,它将如何工作
  • 很高兴听到这个消息!
猜你喜欢
  • 2014-03-26
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多