2012-12-07 73 views
7

我有一个文件上传的问题。我正在使用THIS文章中描述的非常方法。我下载了作者从HERE发布的整个脚本。
该应用程序的目的是通过HTML5拖放文件拖放,然后通过javascript通过ajax请求将它们发送到serverside。
一切工作正常,但是当我想从AJAX请求标题读取参数时会出现问题。下面是PHP“文件阅读器”代码:JavaScript对象的XMLHttpRequest setRequestHeader方法不起作用

$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 

if ($fn) { 
//above there is the upload of the file with file_put_contents function 
//which actually works fine when I replace $fn with my own value and ommit the "if" condition 

此前,XMLHttpRequest.setRequestHeader方法启动设置“X_FILENAME”头。下面是JavaScript的:

var xhr = new XMLHttpRequest(); 

// start upload 
xhr.open("POST", $id("upload").action, true); 
xhr.setRequestHeader("X_FILENAME", file.name); 
xhr.send(file); 

而这里的证明(从我的Chrome浏览器的 “萤火虫” 作物):

当我的var_dump在PHP中$ FN变量返回布尔值FALSE。哪里不对?

P.S.我在Win7 x64上使用XAMPP v1.8.1与Apache 2.4.3和PHP 5.4.7。我在最新的Chrome上运行该网站。正如你所猜测的,该网站正在本地主机上运行。我没有更改php.ini文件中的任何内容 - 所有内容都设置为默认值。

回答

15

下划线似乎不是标头名称的有效字符。使用连字符,它会工作得很漂亮。

xhr.setRequestHeader("X-FILENAME", file.name); 

并且在您的PHP中不需要更改。

+0

的新版本您的解决方案的伟大工程!谢谢。在第一种方法中,我没有注意到你评论中的最后一行,尽管我注定了。 – matewka

-1

Apache和PHP 5.3

$UploadDir=dirname(__FILE__).'/'.; 
    $Datos_cabecera=getallheaders(); 
    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 
    if (!$fn) {$fn=$Datos_cabecera['X_FILENAME'];} //New versions of Apache and PHP 5.3 
    if ($fn) { 
    file_put_contents($UploadDir.$fn,file_get_contents('php://input')); 
    } 
+4

请使用英文。 – agabrys

+0

使用英语中的变量和注释。 –