方案1.使用官方的composer package
方案 2.
使用 jrm2k6/cloudder laravel plugin。
方案2.參考連結
https://laravel-news.com/uploading-cloudinary-with-laravel
你可以考慮要使用方案1、或者是方案2,通常方案2對於使用laravel開發的Developer應該會比較友善,
但是身為新手的我,覺得還是要先試試看,找不到plugin的話,使用composer的方式。
所以我選擇 方案1
首先 composer require cloudinary/cloudinary_php 給他打下去。
1. 抓取package,如同方案1那張圖片一樣。
2.關於html form 和 input
上面兩張圖,雖然是基本知識,可是我還是常忘記XDD (( 到底有誰會特別去記阿!!!?
定义和用法
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data |
不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 "+" 加号,但不对特殊字符编码。 |
正如同W3School網頁所介紹的樣子,因為我們要上傳圖片,所以使用 選項2 multipart/form-data
引用自: http://www.w3school.com.cn/tags/att_form_enctype.asp
在laravel之中,$request其實就是把使用者傳送過來的資訊全部都包在這個Object裡面了!!!!
所以當form post到我們的網址之後,我們就可以輕易的獲取 input的值 、 file的資料
$request->file('name') ----> ( ) 內為HTML tag的Name ex:<input type=’file’ name=’image’>
$request->input('title') ---> ( ) 內為HTML tag的Name ex: <input name=’title’>
Input file 可以獲得不同樣的東西
註記: 根據laravel官方文件表示 File( )方法為
Symfony\Component\HttpFoundation\File\UploadedFile
類別的實例,該類別繼承了 PHP 的 SplFileInfo
類別並提供了許多和檔案互動的方法:
既然Laravel都跟你講這麼清楚了!!!!
我們在$image = $request->file(image),就會獲得UploadedFile 這個Class物件
那我們不要管他有什麼東西,我們只要知道如何操控他就好了!!!!
直接給你API連結,照著手冊拿你想要的東西就對了!!!
https://api.symfony.com/2.8/Symfony/Component/HttpFoundation/File/UploadedFile.html
接著
當我們成功從使用者接收File之後,我們要開始把接收的檔案上傳到Cloudinary,所以我們使用這一行程式碼,
奇怪!!!! 我找不到getReaelPath(); 請再回去重新看一次上面的註記,Laravel的官方文件所說的話
提及到UploadedFile有繼承SplFileInfo,所謂的繼承代表,SubClass可以擁有並且使用Super Class的Method
http://php.net/manual/en/class.splfileinfo.php 所以如果你在Symfony API找不到想要的method,可以直接去看php manual的splfileinfo去尋找你要的method.
在PHP裡面,上傳的檔案如果沒有特別儲存到指定位置通常都丟到了一個叫做tmp的資料夾的地方 EX:
然後你就可以使用這一行,透過Cloudinary的package把檔案上傳到你專屬的地方拉!!!!
重要!!! 在上傳之前別忘記先設定你的API資料,不然Cloudinary可是認不得你這傢伙打哪來的!!!!
$data的結構,這時候你就可以把相關資料儲存到你的DB了!!!
題外話:Cloudinary也有提供client side的上傳,這個有興趣的在自己去看文件找找看吧!!
還有一些option可以在上傳時自行設定唷!!!
note
下面為laravel storagePath();
"home/vagrant/resumeBlog/storage/images/YM4YQpjNGCvASUeVwqrFWHPeYuuX2qPRDpkWCW3j.jpeg"
使用該路徑上傳會失敗
可能是檔案權限的問題,需要再研究
留言列表