PHP和Ajax文件上传 - 无法使用$ _FILES获取tmp_name

时间:2012-10-23 14:44:58

标签: php javascript ajax file-upload

我正在尝试使用Ajax上传文件,但是我遇到了处理文件的麻烦...... 出于测试目的,我构建了一个如下所示的简单代码:

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_POST["q"];
echo $q;

一切正常,xmlhttp.responseText打印[object File]

然而,我的问题是我需要使用$_FILES["q"]['tmp_name']获取临时文件名。为此,我已将代码更改为以下内容:

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("enctype","multipart/form-data");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_FILES["q"]["tmp_name"];
echo $q;

问题是现在xmlhttp.responseText我没有得到任何东西。 谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

查看使用AJAX进行文件上传的答案。它可能,但在所有浏览器中都不兼容。

jQuery Upload Progress and AJAX file upload

-

或者,如果您想要即时上传,可以使用一个很酷的图书馆来上传' Uploadify'。它是一个flash / jquery(或HTML5 now)装备,允许您即时上传文件。在flash版本中,我上次使用它...你可以添加回调函数,使它基本上可以做你想要的任何事情。

一些聪明的javascript可以让这对你有用。

http://www.uploadify.com/

答案 1 :(得分:0)

AJAX不进行文件上传。它不是为此而设计的。标准的解决方法是让JS代码构建一个隐藏的iframe,并在其中执行标准的POST类型上载。因此,如果您尝试执行echo $_FILES['q']['error'],则可能会因“无文件”而获得4