引言: 在項目上傳文件根據項目需求使用了 WebUploader , 遇到了跨域,發現總是上傳失敗, 在網上找了許多的博客, 很少有正確的, 並且解釋的對我這種渣來說比較捉急, 最終通過整理及實踐解決了問題, 遂把解決方案貼出來,希望能幫助到其他遇到此問題的朋友. 1: 在使用WebUploader ...
引言: 在項目上傳文件根據項目需求使用了 WebUploader , 遇到了跨域,發現總是上傳失敗, 在網上找了許多的博客, 很少有正確的, 並且解釋的對我這種渣來說比較捉急, 最終通過整理及實踐解決了問題, 遂把解決方案貼出來,希望能幫助到其他遇到此問題的朋友.
1: 在使用WebUploader 時會發現上傳時有兩個請求, 一個是OPTIONS, 一個是POST, 這就註定了你的api介面需要能接收這兩種方式的請求, 如 :
$this->add("/index/save-file", array( 'controller' => "index", 'action' => "saveFile", ) )->via(["OPTIONS","POST"]);
註 :上述使用的是phalcon的路由, 同理, 其他框架也一樣, 如laravel框架的 any.
2: 因為是跨域上傳, 必然要對頭信息進行設置, 在你當前的方法起始處加入:
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: *'); header('Access-Control-Max-Age: 1000');
註: header('Access-Control-Allow-Origin: *') 此設置可能會造成安全的隱患: 你可以這樣, 如:
header("Access-Control-Allow-Origin: 'http://localhost:7779'"); //7779, 你當前api項目的功能變數名稱地址
3: 因為有兩個請求, 第一個OPTIONS可以"先儘快結束它", 如:
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { return $this->toSuccess(200,'成功'); }
4: 以上操作ok後就應該可以順利操作了:
if ($this->request->hasFiles() == false) { return $this->toError(500,"未獲取到上傳的文件"); } $Files = $this->request->getUploadedFiles(); //獲取文件
...... //後續操作
5: 若有錯誤. 歡迎指正.