Javascript 如何手动检查上传文件是否为txt或修改的扩展名?
我创建了一个网页,我只想上传使用JavaScript的文本文件,它工作正常 使用下面的JavaScript,检查上传文件是否为txtJavascript 如何手动检查上传文件是否为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;
<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”
是基于文件扩展名的,而不是内容。好的,我尝试了那个链接,然后返回。谢谢你。