我使用jQuery-文件上传和jQuery-Iframe-传输来尝试获得对早期IE版本的支持。
我已经将forceIframeTransport选项设置为true,以便它在所有浏览器中的行为方式大致相同,但在服务器端使用iframe传输时,无论是哪个浏览器,我似乎都不会返回任何数据。
我已经吐出了请求头服务器端,然后我返回:
array(
Host => "*******"
Connection => "keep-alive"
Content-Length => "0"
Accept => "*/*"
Origin => "**************"
X-Requested-With => "XMLHttpRequest"
User-Agent => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
DNT => "1"
Referer => "***********"
Accept-Encoding => "gzip,deflate,sdch"
Accept-Language => "en-GB,en-US;q=0.8,en;q=0.6"
Accept-Charset => "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
Cookie => "*********"
)*****指出了发出的信息;您不需要这个;)
这看起来不错,但是$_REQUEST是空的(即array()),输入缓冲区也是空的:
$handle = fopen('php://input', 'r');
$file_data = '';
while(($buffer = fgets($handle, 4096)) !== false) {
$file_data .= $buffer;
}
fclose($handle); // $file_data = '';当我不使用iframe的时候一切都很好,但是我需要IE支持.有没有人有使用iframes传输文件的经验,并且可能知道为什么没有数据通过?
当我使用jQuery-File-Upload / js / jquery.iframe-transport.js并强制使用iframe传输时,它在Chrome中工作,但是请求甚至没有到达IE中的服务器。
当我使用jquery.iframe transport.jquery.iframe-transport.js并强制使用iframe传输时,它在Chrome中就会中断,但这很好,因为Chrome支持正确的XHR文件传输,并且请求至少击中IE中的服务器,但没有数据。
我已经更新了我的脚本以支持任何一种传输方法:
if(empty($_FILES)) {
$handle = fopen('php://input', 'r');
$file_data = '';
while(($buffer = fgets($handle, 4096)) !== false) {
$file_data .= $buffer;
}
fclose($handle);
} else {
$file_data = file_get_contents($_FILES['files']['tmp_name'][0]);
}但是,不管我做什么,我仍然无法在IE中获得任何数据。
当我说" IE“时,我现在正在IE8中进行专门的测试。但我需要支持回到7点。这家伙声称支持所有的IE6。
发布于 2013-02-15 00:20:38
几个小时后,我终于找到了这个问题。
首先,您需要使用与jQuery捆绑在一起-文件上传提供的传输插件,因为它是为它设计的;)我不太清楚为什么另一个插件会更进一步,但我马上就会讲到。
我在IE中注意到,在核心jquery库的某个地方,我得到了一个“访问被拒绝”的JavaScript错误。从我在网上读到的内容来看,这通常发生在你试图提交到另一个域的URL时,而我并没有这样做,所以我拒绝了它。
我正在比较这两个不同的传输脚本所做的不同之处,当我看到一个版本中的form.submit()和另一个版本中的form[0].submit()的一行时。因此,我尝试添加[0],然后注意到“访问已拒绝”错误更改为指向该行。所以很明显,它不喜欢我提交文件的地方。
我再次检查了form.action,URL看起来仍然很好。通过一些谷歌-福,我发现如果事件不是起源于原始/本机文件输入元素,也可以得到此错误。
我已经用一个花哨的输入替换了本机输入,然后在隐藏的本机输入上触发了一个“假的”‘点击’事件。它不喜欢这个。
拿出我的假上传按钮,把本地的一个(<input type="file"/> fyi)重新打开,现在所有的浏览器都很有魅力。哇哈!
发布于 2014-10-23 02:04:29
不管值多少钱..。
在文件上传到服务器之前,我正在使用jQuery v1.9.1对文件进行同步病毒扫描。如果文件有病毒,我们将返回HTTP 400,如果没有病毒,则返回HTTP 200。
HTTP400响应导致IE8“访问拒绝”结果。
当我将服务器回复从400改为401时,UI工作得很好.
再说一遍,“因为它的价值。”
https://stackoverflow.com/questions/14882713
复制相似问题