繁体   English   中英

PHP和Ajax文件上传-无法通过$ _FILES获得tmp_name

[英]PHP and Ajax file upload - Can't get the tmp_name with $_FILES

我正在尝试使用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我什么也没得到。 有人知道我在做什么错吗?

查看此答案以使用AJAX上传文件。 可能,但并非在所有浏览器中都兼容。

jQuery上传进度和AJAX文件上传

-

另外,如果您想即时上传,则可以使用一个很酷的库,称为“ Uploadify”。 这是一个Flash / jquery(或现在的HTML5)绑定,可让您即时上传文件。 在Flash版本中,我上次使用它是...您可以添加回调函数,使其基本上可以执行您想要的任何事情。

一些聪明的javascript可能会为您工作。

http://www.uploadify.com/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM