最近因為在做前後端分離,後端PHP所有Api都使用RESTFul風格。
但是在使用PUT上傳檔案的時候,發現$_FILES沒有檔案資訊(可能沒有上傳臨時檔案,待驗證),使用POST是可以的,並且PUT從標準輸入資料流擷取過來的資料,讀取出來是下面這種格式(上面我猜測沒有上傳臨時檔案,是因為看標準輸入資料流裡面存著檔案資訊),需要另外解析。
#擷取到的輸入資料流內容------WebKitFormBoundarybzEhWNCqbo9qKZBXContent-Disposition: form-data; name="upload"; filename="一些不錯的職位.md"Content-Type: text/markdownxxxxxxxxxxxx------WebKitFormBoundarybzEhWNCqbo9qKZBX--
目前我的思路是兩個:
-
如果上傳臨時檔案(這個正在測試...): 如果上傳了,可以讀臨時檔案。
-
如果不上傳臨時檔案:嘗試解析這串form-data傳過來的參數,但我不知道這種格式php有沒有對應方法進行解析。
順帶吐槽下,RESTFul用起來經常會有問題:
-
在跨域的時候,普通的form表單(GET, POST)沒問題,但是使用PUT,DELETE的話,需要設定跨域頭。
PS:不明白,為什麼需要?
-
MDN HTTP Method文檔竟然沒有PUT,DELETE的詳細介紹...
-
PHP擷取PUT,DELETE需要到file_get_contents('php://input');擷取參數資訊,沒有類似$_PUT,$_DELETE的全域變數。
============= [ 22:01 ] ===================
到stackoverflow逛了下,發現不少碰到相同問題的,暫時沒看到比較好的解決方案。
補充下,這篇文章jquery ajax put file, php save file,博主和我碰到了一樣的問題,不過他是通過用正則來解析處理資料的。
我在想,有沒有比較好的方案,能夠模仿PHP處理POST請求一樣,把form-data串,解析出來,普通參數,存到$_PUT($_POST), 檔案傳到臨時目錄,然後返迴文件資訊到$_FILES.
============ [ 10-10 10:16 ] ===================
這片博文如何使用multipart/form-data格式上傳檔案,有講到form-data的格式。
目前先自己簡單寫一個解析form-data的composer組件。
回複內容:
最近因為在做前後端分離,後端PHP所有Api都使用RESTFul風格。
但是在使用PUT上傳檔案的時候,發現$_FILES沒有檔案資訊(可能沒有上傳臨時檔案,待驗證),使用POST是可以的,並且PUT從標準輸入資料流擷取過來的資料,讀取出來是下面這種格式(上面我猜測沒有上傳臨時檔案,是因為看標準輸入資料流裡面存著檔案資訊),需要另外解析。
#擷取到的輸入資料流內容------WebKitFormBoundarybzEhWNCqbo9qKZBXContent-Disposition: form-data; name="upload"; filename="一些不錯的職位.md"Content-Type: text/markdownxxxxxxxxxxxx------WebKitFormBoundarybzEhWNCqbo9qKZBX--
目前我的思路是兩個:
-
如果上傳臨時檔案(這個正在測試...): 如果上傳了,可以讀臨時檔案。
-
如果不上傳臨時檔案:嘗試解析這串form-data傳過來的參數,但我不知道這種格式php有沒有對應方法進行解析。
順帶吐槽下,RESTFul用起來經常會有問題:
-
在跨域的時候,普通的form表單(GET, POST)沒問題,但是使用PUT,DELETE的話,需要設定跨域頭。
PS:不明白,為什麼需要?
-
MDN HTTP Method文檔竟然沒有PUT,DELETE的詳細介紹...
-
PHP擷取PUT,DELETE需要到file_get_contents('php://input');擷取參數資訊,沒有類似$_PUT,$_DELETE的全域變數。
============= [ 22:01 ] ===================
到stackoverflow逛了下,發現不少碰到相同問題的,暫時沒看到比較好的解決方案。
補充下,這篇文章jquery ajax put file, php save file,博主和我碰到了一樣的問題,不過他是通過用正則來解析處理資料的。
我在想,有沒有比較好的方案,能夠模仿PHP處理POST請求一樣,把form-data串,解析出來,普通參數,存到$_PUT($_POST), 檔案傳到臨時目錄,然後返迴文件資訊到$_FILES.
============ [ 10-10 10:16 ] ===================
這片博文如何使用multipart/form-data格式上傳檔案,有講到form-data的格式。
目前先自己簡單寫一個解析form-data的composer組件。
PHP的全域變數$_FILES只能擷取post方式上傳的檔案,若你要使用put 來上傳檔案,你必須自己處理該stream
手機端來說,目前的主流是 get+post+json
4,標準的form data上傳格式
php put需要單獨解析,另put一般用於接受json格式的資料
謝謝回答,另外,問題重新編輯了下, :)