CURL 傳送檔案

wavebossy6666發表於2019-01-15

程式碼備份錄——CURL 傳送檔案檔案
說明:表單提交檔案 -> laravel接收 -> curl提交給另一個服務端

html 部分

<form action="/testFile" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" />
</form>

配置路由

// form 提交
Route::any("/testFile","TestController@testFile");
// form action 接收
Route::any("/testLoadFile","TestController@testLoadFile");

服務端組裝CURLfile,併傳送另一個服務端

public function testFile(Request $request){
        $data = array(
            'file'=> new \CURLFile(realpath($request->file('file')->path())),
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,"/testLoadFile");//此處以當前伺服器為接收地址
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT,10);//設定最長等待時間
        curl_setopt($ch, CURLOPT_POST, 1);//post提交
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        $data = curl_exec($ch);//執行
        if(curl_errno($ch)){
            return curl_error($ch);
        }
        curl_close($ch);//釋放

        return json_encode($data);
    }

模擬另一個服務端作為接收

public function testLoadFile(Request $request){
        if ($request->hasFile('file')) {
            if ($request->file('file')->isValid()){
                // 上傳成功
                // 隨機名字 . 字尾
                $fileName = "other/".Date("YmdHis").substr(md5(time()),5,15).".".$request->file("file")->extension();// 需要 開啟php_fileinfo 擴充套件 否則會報錯
                // 獲取臨時上傳的路徑(如果不存在本地,則方法呼叫完之後,會被刪除)
                //$fileUrl = $request->file('file')->path();
                // 可選儲存在本地
                $fileUrl = $request->file("file")->move(__DIR__."/",$fileName);

                return ($fileUrl);
            }
        }
        return json_encode([]);
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

朝著夢,踏平坎坷

相關文章