Javascript 如何手动检查上传文件是否为txt或修改的扩展名?

Javascript 如何手动检查上传文件是否为txt或修改的扩展名?,javascript,jquery,file-upload,Javascript,Jquery,File Upload,我创建了一个网页,我只想上传使用JavaScript的文本文件,它工作正常 使用下面的JavaScript,检查上传文件是否为txt <script> function checkExt() { if(document.mainForm.myfile.value.lastIndexOf(".txt")==-1) { alert("Please upload only .txt extention file"); return false;

我创建了一个网页,我只想上传使用JavaScript的文本文件,它工作正常

使用下面的JavaScript,检查上传文件是否为txt

<script>
  function checkExt() {
    if(document.mainForm.myfile.value.lastIndexOf(".txt")==-1) {
      alert("Please upload only .txt extention file");
      return false;
    }
  }
</script>

<form name="mainForm">
   <input type="file" name="myfile" onchange="checkExt();"/>
</form>

函数checkExt(){
if(document.mainForm.myfile.value.lastIndexOf(“.txt”)=-1){
警报(“请仅上传.txt扩展文件”);
返回false;
}
}

问题:如果我手动将文件.exe的扩展名更改为.txt,那么它也会被上载,因为我只检查文件的扩展名。因此,我的问题是如何防止上传exe文件(手动更改为txt


我想停止上传强制或手动更改或重命名的exe、jar文件。

我认为扩展上的客户端验证无法达到此目的,您需要在服务器端进行MIME类型验证才能更好地解决此问题

参考条款


通过ROFLwTIME

您只需要使用
form.value
而不是
form.files
来获取文件。在那里,您可以找到文件的以下属性:

{
    lastModified: 1502265800000
    lastModifiedDate: Wed Aug 09 2017 11:03:20 GMT+0300 (EEST) {}
    name: "14ecdf0302f4bbc84cfbbf85b3b94013.jpg"
    size: 463225
    type: "image/jpeg"
}

您需要在后端代码中将修改后的exe文件验证为txt。这是非常简单的代码。下面的程序正在检查文件是否可执行,或者将exe文件的扩展名改为.txt

在这里我们可以读取文件进行验证,这意味着文件是否包含字节码

import java.io.File;
import java.io.FileInputStream;

public class TestExecutableFile {

    public static void main(String[] args) {

        byte[] firstBytes = new byte[4];
        try {
            FileInputStream input = new FileInputStream(new File("[filepath]/[filename]"));
            input.read(firstBytes);

            // Checking file is executable
            if (firstBytes[0] == 0x4d && firstBytes[1] == 0x5a) {
                System.out.println("Executable File");
            }else{
                System.out.println("Non Executable File");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端可以更改Javascript。所以这只会让你免于一些脚本孩子。真正伤害你的人只会嘲笑任何js解决方案。你需要一个后端验证。@Doomenik,好的,我会在google上搜索后端验证,或者你能用Java引用这个场景的任何链接吗???但是用户2560664最好在服务器端检查
类型:“image/jpeg”
是基于文件扩展名的,而不是内容。好的,我尝试了那个链接,然后返回。谢谢你。