javascript - ajax結合html5中的file實作檔案上傳,後台用PHP接收,該如何用PHP接收傳過來的formData?
如何用PHP接收前端傳送過來的文件,formdata這個物件的文件到是什麼類型的二進位的資料嗎?
前端程式碼:
<code><input type="file" name="file" id="file" multiple> <script type="text/javascript"> var file = document.querySelector("#file"); file.onchange = function(){ var files = this.files; for(var i=0;i<files.length;i++){ ajax('ajax.php',files[i],function(data){ console.log(data) console.log('fn') }) } } function ajax(url,data,fn){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){ fn(xhr.responseText) } } var formData = new FormData(); formData.append('file',data); xhr.open('POST',url,true); //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(formData); } </script></code>
php程式碼:
<code><?php if(!empty($_FILES['file'])){ $fileinfo = $_FILES['file']; $destination = "image/"; $destination = $destination.basename($_FILES['file']['name']); move_uploaded_file($fileinfo['tmp_name'],$destination); echo "succ"; } ?></code>
不知道為什麼if(!empty($_FILES['file']))這判斷一直false,改用if(!empty($_POST['file']))也是一樣;哪位知道後台是如何接收傳過來的文件的嗎?可不可以給個demo的PHP檔!
回覆內容:
如何用PHP接收前端傳送過來的文件,formdata這個物件的文件到是什麼類型的二進位的資料嗎?
前端程式碼:
<code><input type="file" name="file" id="file" multiple> <script type="text/javascript"> var file = document.querySelector("#file"); file.onchange = function(){ var files = this.files; for(var i=0;i<files.length;i++){ ajax('ajax.php',files[i],function(data){ console.log(data) console.log('fn') }) } } function ajax(url,data,fn){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){ fn(xhr.responseText) } } var formData = new FormData(); formData.append('file',data); xhr.open('POST',url,true); //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(formData); } </script></code>
php程式碼:
<code><?php if(!empty($_FILES['file'])){ $fileinfo = $_FILES['file']; $destination = "image/"; $destination = $destination.basename($_FILES['file']['name']); move_uploaded_file($fileinfo['tmp_name'],$destination); echo "succ"; } ?></code>
不知道為什麼if(!empty($_FILES['file']))這判斷一直false,改用if(!empty($_POST['file']))也是一樣;哪位知道後台是如何接收傳過來的文件的嗎?可不可以給個demo的PHP檔!
我在php中加了3個日誌記錄:
<code>file_put_contents('/tmp/tmp.log', '$_FILES'.":\n".print_r($_FILES, true)."\n\n", FILE_APPEND); file_put_contents('/tmp/tmp.log', '$_POST'.":\n".print_r($_POST, true)."\n\n", FILE_APPEND); file_put_contents('/tmp/tmp.log', '$_SERVER'.":\n".print_r($_SERVER, true)."\n\n", FILE_APPEND);</code>
儲存路徑改成tmp了,其他沒變,得到的結果:
<code>[root@localhost tmp]# cat tmp.log $_FILES: Array ( [file] => Array ( [name] => Screenshot_2010-01-01-08-11-30.png [type] => image/png [tmp_name] => /tmp/phposvIcw [error] => 0 [size] => 30920 ) ) $_POST: Array ( ) $_SERVER: Array ( [USER] => nginx [HOME] => /var/lib/nginx [FCGI_ROLE] => RESPONDER [SCRIPT_FILENAME] => /var/www/test.php [SCRIPT_NAME] => /test.php [PATH_INFO] => [QUERY_STRING] => [REQUEST_METHOD] => POST [CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb [CONTENT_LENGTH] => 31127 [REQUEST_URI] => /test.php [DOCUMENT_URI] => /test.php [DOCUMENT_ROOT] => /var/www [SERVER_PROTOCOL] => HTTP/1.1 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_SOFTWARE] => nginx/1.6.3 [REMOTE_ADDR] => 192.168.255.1 [REMOTE_PORT] => 60032 [SERVER_ADDR] => 192.168.255.128 [SERVER_PORT] => 80 [SERVER_NAME] => [REDIRECT_STATUS] => 200 [HTTP_HOST] => 192.168.255.128 [HTTP_CONNECTION] => keep-alive [HTTP_CONTENT_LENGTH] => 31127 [HTTP_ORIGIN] => http://192.168.255.128 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 [HTTP_CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb [HTTP_ACCEPT] => */* [HTTP_DNT] => 1 [HTTP_REFERER] => http://192.168.255.128/test.html [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,ja;q=0.6,en;q=0.4 [PHP_SELF] => /test.php [REQUEST_TIME_FLOAT] => 1470377177.1168 [REQUEST_TIME] => 1470377177 ) </code>
檔案成功上傳
<code>[root@localhost tmp]# ll total 36 -rw-r--r-- 1 nginx nginx 30920 Aug 5 14:06 Screenshot_2010-01-01-08-11-30.png -rw-r--r-- 1 nginx nginx 1705 Aug 5 14:06 tmp.log [root@localhost tmp]# </code>
沒有出錯…
先來個印看看啊!先別用if
判斷。直接
<code>echo 'FILES:'.var_dump($_FILES); echo 'POST:'.var_dump($_POST); die();</code>
看看是什麼東東。然後在一步一步的來
F12看請求啊
樓主用$_REQUES
接收試試看。
你也可以直接傳base64
編碼
打開chrome的控制台看看請求Request發送了什麼,主要看請求頭的Content-Type和請求體

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
