我正在尝试将图片上传到我们的服务器,它适用于Chrome和Firefox以及IE9,但不适用于IE8。对于IE8,请求中的文件名显示为空白,但在Chrome中则不显示。在IE8的情况下,服务器检索的文件是0千字节(应该是219kb)。
HTML
<form action="$!toolsServiceUrl" enctype="multipart/form-data" method="post" id="left-section" class="section right-border container">
<input type="hidden" name="okRedirectURL" value="$!okRedirect" />
<input type="hidden" name="errorRedirectURL" value="$!errorRedirect" />
<input type="hidden" name="updateSection" value="LOGO_AND_MESSAGE" />
<input type="hidden" name="loginGuid" value="$!loginGuid" />
<input id="current-file" class="file hide" type="file" accept="image/*" name="file"/>
<a id="upload-now" class="btn upload open-file">$!INTL_UploadNew</a>
<input href="#" class="btn btn-primary submit-for-review" type="submit" value="$!INTL_SubmitForReview" />
</form>
Chrome请求有效负载
------WebKitFormBoundaryhaQZT4Syn2OCktxQ
Content-Disposition: form-data; name="file"; filename="wallpaper-2055060.jpg"
Content-Type: image/jpeg
IE8请求有效负载
-----------------------------7dc230b1a0a3a
Content-Disposition: form-data; name="file"; filename=""
Content-Type: application/octet-stream
(我省略了请求有效负载中的所有无关数据)
我需要它才能在IE8上工作,因为我们的很多用户都使用IE8。
答案 0 :(得分:1)
最有可能隐藏文件输入字段,然后使用javascript触发点击事件打开文件对话框。 IE假定点击为非安全,不会发送到服务器。
为避免这种情况,您需要点击真实字段或制作<label for="idOfFileInputField">
,这也会触发&#34;安全&#34;点击事件。
您的代码可能如下所示:
<form action="$!toolsServiceUrl" enctype="multipart/form-data" method="post" id="left-section" class="section right-border container">
...
<input id="current-file" class="file hide" type="file" accept="image/*" name="file"/>
<label for="current-file" id="upload-now" class="btn upload open-file">$!INTL_UploadNew</label>
...
</form>
您不应该使用display:none
隐藏文件输入字段,否则不会触发标签点击。相反,你可以使position:absolute; left:-9999px
之类的内容隐藏在可见的视口之外。
答案 1 :(得分:0)
从远程计算机尝试相同的操作,您可能会得到不同的结果。 IE 8中存在关于文件上载的“安全功能”(错误),导致它们不发送正在上载的文件的正确路径。据我所知,这只是在本地访问本地网站时的一个问题。
查看此网站了解更多信息: http://acidmartin.wordpress.com/2009/06/09/the-mystery-of-cfakepath-unveiled/
如果您在浏览器首选项中将站点添加到受信任的站点,则从远程计算机看起来应该没问题。但在当地它仍然无法运作。