2012-03-02 67 views
0

我有excel文件abc.xls,并使用命令提示符将其重命名为abc.doc。 我的要求是:我想上传一个正确的doc文件,但是在那里我只能检查上传文件的MIME类型,这是不够的。我想在上传doc文件之前确认它是一个文档,并且不允许用户上传abc.doc文件,因为它不是一个doc文件,它是一个excel文件。如何在通过网页上传文件之前阅读word文档

+0

可能的重复http://stackoverflow.com/q/71944/745359 – wintersolutions 2012-03-02 08:24:15

+0

为什么你需要客户端验证?如果你不相信输入,你必须再次在服务器上检查它。我在问题链接中解决的解决方案如何? – wintersolutions 2012-03-02 16:59:09

+0

如果我打开上传的文件,实际上不是doc文件,它会在ms字中打开时出现损坏的文件等错误。所以我正试图避免这个未来的问题。 – baviskarss 2012-03-03 05:35:01

回答

0

在上传之前,您可能需要一个ActiveX对象来访问客户端系统上的文件内容。检查与JavaScript的字节数组找到它是否是一个真正的文档可能证明有趣的,虽然:-) 编辑:

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

+0

从大小我们不能决定这是适当的文档文件 – baviskarss 2012-03-02 10:40:35

+0

我知道。这就是为什么我说检查字节数组是否真的是一个真正的doc文件将会很有趣......旧的doc文件在结尾处似乎具有类似于“Word.Document.8”的内容。 docx文件是压缩的xml,偶尔会有“word /”文本定义节点......但是现在大多数浏览器都默认阻止ActiveX,因此我真的推荐上传文件并检查服务器上的字节,然后将其保存到磁盘。 – Elementenfresser 2012-03-03 08:04:08

1

因为OP在评论中写的:

你是在错误的轨道在这里,验证应该总是发生在服务器端,您可以添加额外的验证在客户端,但它不是必需的。你必须为一个简单的理由这样做:

客户可以随时规避客户端验证方法,因为客户端是完全在其控制下。因此,即使您实施您的验证方法来检查其文档或Excel文档,不良用户总是可以向您发送禁用验证的发布请求,并且您将获得Excel文档或病毒等。

这是一个核心的web编程原则:永远不要相信输入数据,你不能仅在客户端验证!

其次,您的验证在服务器上很容易完成。所以你应该上传任何文件(检查文件扩展名&大小),然后在服务器上验证!