javascript - 如何手动检查上传文件是txt还是修改后的扩展名?

标签 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;
    }
  }
</script>

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

Live Demo Here

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

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

最佳答案

您需要在后端代码上验证修改后的 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 - 如何手动检查上传文件是txt还是修改后的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45711994/

相关文章:

javascript - 将 HTML 源代码转换为读取流

javascript - 将 jQuery Accordion 与 GallerificPlus 结合使用时发生冲突

javascript - 如何从 Javascript 将值分配给 Apex

javascript - 如何创建富文本编辑器

javascript - 在用户打开它之前动态地将 <options> 添加到 <select> 元素

javascript - 选择占位符选项时选择的 Jquery 切换类

php - 这就是用 PHP 和 Ajax 防止 CSRF 所需要做的全部工作吗?

php - 我可以使用 CodeIgniter 上传 .c 或 .cpp 文件吗?

javascript - 如何将文件内容上传到变量 Javascript/HTML?

php - Symfony 3 文件上传