【发布时间】:2013-01-30 17:17:24
【问题描述】:
我正在使用 jQuery-File-Upload 和 jQuery-Iframe-Transport 来尝试获得对旧版本 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 => "*********"
)
[*****s 提示信息泄露;你不需要那个;)]
看起来没问题,但是$_REQUEST 是空的(即array()),并且输入缓冲区也是空的:
$handle = fopen('php://input', 'r');
$file_data = '';
while(($buffer = fgets($handle, 4096)) !== false) {
$file_data .= $buffer;
}
fclose($handle); // $file_data = '';
当我不使用 iframe-transport 但我需要 IE 支持时,这一切都很好,但我需要 IE 支持...有没有人有使用 iframe 传输文件的经验并且可能知道为什么没有数据通过?
当我使用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”时,我现在专门在 IE 8 中进行测试。我需要支持回到 7。 This guy 声称支持一直到 IE 6。
【问题讨论】:
标签: php jquery-file-upload jquery-iframe-transport