close

方案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"

使用該路徑上傳會失敗

可能是檔案權限的問題,需要再研究

arrow
arrow

    蕭瑞文 發表在 痞客邦 留言(0) 人氣()