我们在带有 IIS 6.0 并使用 HTTPS 的 Windows Server 2003 上的 IE-10 中运行 ColdFusion 8。
Test.cfm 页面具有用于创建“浏览”按钮以选择要上传的文件然后上传文件的基本代码:
<CFIF IsDefined("form.Action")>
<CFFILE ACTION="UPLOAD"
DESTINATION="D:\Documents\123\"
NAMECONFLICT="OVERWRITE"
FILEFIELD="Filedata">
<b>File uploaded.</b>
<CFSET PathName = "#File.ClientFileName#.#File.ClientFileExt#">
<CFOUTPUT>
<CFQUERY NAME="Attachments" DATASOURCE="#PriSource#" USERNAME="Test" PASSWORD="Account">
INSERT INTO V$ATTACH_DOCs
(ID, DOCNAME, DOCLOCATION)
VALUES (123, 'Attach1', '#PathName#')
</CFQUERY>
</CFIF>
<FORM NAME="FileUpLoadNew" id="FileUpLoadNew" action="../TEST/Test.cfm" enctype="multipart/form-data" method="post">
<input type="Hidden" name="Action" value="Upload">
<INPUT TYPE="File" name="Filedata" size="45" maxlength="255">
<INPUT TYPE="Submit" NAME="AttachButton" WIDTH="90" VALUE="Attach">
</FORM>
问题:此代码几乎一直适用于(.txt、.doc、.cfm..sql)等文件类型。它甚至可以处理至少 5-10 Mb 的大文件。但是 .pdf、jpg 和大型 .doc 文件 (4Mb) 会导致它挂起,“等待来自 Our.Site.URL 的响应...”,直到它最终显示“无法显示页面”。
但是,我们有时可以只重新加载页面并选择相同的文件,它会上传正常!然后我们可以重试另一个文件,它可能会也可能不会加载。当文件很小(如 300Kb)时,我们还看到“HTTP 错误 413 请求实体太大”,通常是 pdf 文件。
我们最初认为这是服务器上 UploadReadAheadSize 的设置。我们增加了它,但没有任何效果。
我们还测试了只使用<INPUT TYPE="File" ...>
,<INPUT TYPE="Submit" ...>
甚至不调用 CFFILE,我们可以看到相同的问题,即某些文件类型不被接受并且浏览字段不清除并且显示“等待响应...”。我们认为 CFFILE 是问题,但这个测试表明它必须在 IE 或服务器中。我们还尝试使用 FireFox 并得到相同的不一致结果。
似乎服务器在处理 pdf、jpg 和更大的文件时存在问题,但并非总是如此。重新加载页面有时会允许文件加载。但这并不一致。我无权访问服务器来更改设置,但我可以提交更改设置的请求。我们只需要用户上传文件的一致行为。