Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 是表单元素<;输入类型=";文件"&燃气轮机;是否依赖外部软件来识别要上载的文件类型?_Html_Browser_Xhtml_File Upload - Fatal编程技术网

Html 是表单元素<;输入类型=";文件"&燃气轮机;是否依赖外部软件来识别要上载的文件类型?

Html 是表单元素<;输入类型=";文件"&燃气轮机;是否依赖外部软件来识别要上载的文件类型?,html,browser,xhtml,file-upload,Html,Browser,Xhtml,File Upload,我在上传表单中遇到了一些不寻常的行为。除非客户机上安装了office,否则表单似乎无法识别office电子表格文件。这对我来说没有任何意义,但在Chrome、Firefox和IE8中,除非客户端计算机安装了Microsoft Office,否则我的上传无法传递XLSX文件 这正常吗?有办法解决这个问题吗 以下是我使用的基本形式: <form enctype="multipart/form-data" method="post" action="<%=request.Serve

我在上传表单中遇到了一些不寻常的行为。除非客户机上安装了office,否则表单似乎无法识别office电子表格文件。这对我来说没有任何意义,但在Chrome、Firefox和IE8中,除非客户端计算机安装了Microsoft Office,否则我的上传无法传递XLSX文件

这正常吗?有办法解决这个问题吗

以下是我使用的基本形式:

    <form enctype="multipart/form-data" method="post" action="<%=request.ServerVariables("SCRIPT_NAME")%>">
        <table>
            <tr>
                <th>XLS File </th>
                <td><input type="file" name="UploadXLS" value=""  style="width:300px" /></td>
            </tr>
        </table>
        <p><button type="submit">Upload</button></p>
    </form>

XLS文件
上传

编辑 以下是验证xls或xlsx文件的代码:

if  NOT (trim(fileXLS.ContentType) = "application/vnd.ms-excel" _
    or trim(fileXLS.ContentType) = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) _
then
    dictImportErrors.add "xlsContentType", "Spreadsheet file is not an XLS or an XLSX<br />Or, the file could be open in another location"
end if
如果没有(trim(fileXLS.ContentType)=“application/vnd.ms excel”_
或trim(fileXLS.ContentType)=“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”)_
然后
dictImportErrors.add“xlsContentType”,“电子表格文件不是XLS或XLSX
,或者,该文件可以在其他位置打开” 如果结束

fileXLS
是一个从perits.Upload dll提交的对象,在经典asp中。

我不知道MIME类型检测在Windows系统上是如何工作的,但是如果您使用的是浏览器发送的MIME类型,我想这种行为是有意义的。我想MS Office会通知操作系统将文件类型解析为MIME类型的任何部分,扩展名为.XSLX的文件将被视为
application/MS Office which
。浏览器将有自己的MIME类型表,但未知类型将依赖于操作系统

然而,依赖这种MIME类型并不是一个好主意。它可能不可靠(正如我们所看到的),并且可能被篡改

进行适当的服务器端检查更为可行。例如,AFAIK、XSLX文件是XML文件的压缩集合,不是吗?在这种情况下,您可以解压缩文件并查看其中的内容


重新编辑:这似乎确实依赖于发送的MIME类型。最好在服务器端进行检测。不过我不熟悉ASP,所以我不知道有哪些选项。有可能在不必手动解压缩的情况下检测到XLSX文件。

如果不知道使用哪种方法验证/识别上载,则无法回答。这非常奇怪。我很确定这不是正常行为。@quakkels您在哪里验证文件类型或试图将其识别为XSLX?@quakkels是的,但使用什么方法?如果您使用浏览器发送的MIME类型,这可能是有意义的。但不管怎样,依赖这些信息并不是一件好事,因为它们不可靠,而且可以被篡改。。。好的,我会看看代码。是的,当我检查mimetype时,perits Upload会得到浏览器返回的mimetype。因此,我怀疑如果excel mime类型没有在客户端系统上注册,那么浏览器将无法正确发送该文件。@quakkels:浏览器正在正确发送文件,只是没有正确设置mime类型。但是,您不应该依赖客户端发送的mime类型,因为欺骗很容易,并且可能导致非常糟糕的事情。