我有excel文件abc.xls,我使用命令提示符将其重命名为abc.doc。 我的要求是:我想上传一个正确的doc文件,但在那里我只能检查要上传文件的MIME类型,这还不够。我想在上传doc文件之前确认它是一个doc并且不允许用户上传abc.doc文件,因为它不是doc文件的excel文件。
答案 0 :(得分:1)
因为OP在评论中写道:
您在这里走错了路,验证应始终在服务器端进行,您可以在客户端添加其他验证,但不是必需的。你必须这样做的原因很简单:
客户端始终可以绕过客户端验证方法,因为客户端完全受其控制。因此,即使您实施验证方法以检查其是否为doc或excel文档,错误的用户始终只会向您发送禁用验证的帖子请求,并且您将获得Excel文档或病毒等。
这是一个核心的网络编程原则:绝不信任输入数据,您无法仅在客户端验证!
其次,您可以在服务器上轻松完成验证。所以你应该上传任何文件(检查文件扩展名和大小),然后在服务器上验证!
答案 1 :(得分:0)
在上传之前,您可能需要一个ActiveX对象来访问客户端系统上的文件内容。使用javascript检查字节数组以查找它是否是真正的doc可能会证明有趣:-) 编辑:
function CheckWordDoc(filepath){
var fso, f, ts, s;
var ForReading = 1, ForWriting = 2, ForAppending = 8;
var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.getFile(filepath);
ts = f.OpenAsTextStream(ForReading, TristateUseDefault);
while (!ts.AtEndOfStream) {
s = ts.ReadLine();
if (s.indexOf("Word.Document.8") != -1) {
ts.Close( );
return true;
}
}
ts.Close( );
return false;
}
http://www.piclist.com/techref/language/asp/vbs/vbscript/jsmthopenastextstream.htm http://msdn.microsoft.com/en-us/library/hwfw5c59%28v=vs.85%29.aspx