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

标签 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 我什么也得不到。 有人知道我做错了什么吗?

最佳答案

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

jQuery Upload Progress and AJAX file upload

--

或者,如果您想即时上传,可以使用一个名为“Uploadify”的很棒的库。它是一个 flash/jquery(或现在的 HTML5)装置,允许您即时上传文件。在 Flash 版本中,我上次使用它...您可以添加回调函数,使其基本上可以执行任何您想要的操作。

一些聪明的 javascript 可以为您完成这项工作。

http://www.uploadify.com/

关于PHP 和 Ajax 文件上传 - 无法使用 $_FILES 获取 tmp_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033104/

相关文章:

php - 为什么我不能在 PHP 5.5.4 中将 $this 用作词法变量?

javascript - 如何使用javascript禁用在firefox中提交表单时弹出的保存密码

IE10 上的 JavaScript : Maximum value in textbox asp. 网络

javascript - 使用 AngularJS 单击添加按钮时如何在表中插入新数据行

php - 文件处理问题

javascript - 狡猾的 slider 初始化

jQuery AJAX 通过热键提交

javascript - 在 ajaxComplete 之后加载 javascript

javascript - 为什么我的 HTML 表在使用 ajax 刷新时会丢失引导数据表属性?

php - 在 Adaptive Paypal Payments 中发送每件商品的运费详情