簡體   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