2

我正在尝试将图像上传到我们的服务器,它适用于 Chrome、Firefox 和 IE9,但不适用于 IE8。请求中的文件名在 IE8 中显示为空白,但在 Chrome 中不显示。在 IE8 的情况下,服务器检索到的文件是 0 KB(应该是 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。

4

2 回答 2

1

很可能您隐藏文件输入字段,然后使用 javascript 触发单击事件以打开文件对话框。IE 假定点击是不安全的,不会发送到服务器。

为避免这种情况,您需要单击真实字段或创建一个<label for="idOfFileInputField">也将触发“安全”单击事件。

您的代码可能如下所示:

<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取而代之的是,您要从可见的视口中隐藏某些东西。

于 2014-05-15T15:52:42.117 回答
0

在远程机器上尝试同样的事情,你可能会得到不同的结果。IE 8 中有一个关于文件上传的“安全功能”(错误),导致它们无法发送上传文件的正确路径。据我了解,这只是在本地访问站点时的问题。

查看此网站了解更多信息: http ://acidmartin.wordpress.com/2009/06/09/the-mystery-of-cfakepath-unveiled/

如果您在浏览器首选项中将站点添加到受信任的站点,那么从远程计算机上看起来应该没问题。但是在本地还是不行。

于 2012-08-31T01:16:08.077 回答