七牛云圖片處理實(shí)踐之LIVE PHOTO|國內(nèi)首家支持
蚌山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),蚌山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為蚌山近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的蚌山做網(wǎng)站的公司定做!
???
???
什么是Live Photo?
在當(dāng)前蘋果發(fā)布的iPhone6s和iPhone6s Plus手機(jī)上,支持使用相機(jī)拍攝 Live Photos 動(dòng)態(tài)照片,并且還會(huì)有聲音。當(dāng)然對(duì)于沒有 iPhone6s 的用戶,只要是升級(jí)到了 iOS9 系統(tǒng),雖然不能拍攝 Live Photos 照片,但可以查看他人發(fā)來的Live Photos 照片。
Live Photo 由一張 JPG 圖片以及一個(gè) 45 格 MOV 影片檔所組成。在播放Live Photo 時(shí),這段 MOV 則以 15 格 / 秒的速度來播放。因?yàn)榻Y(jié)合了圖片與影片,因此一個(gè) Live Photo 相當(dāng)于一張普通圖片的 2 倍大小。
Live Photo 的優(yōu)勢
很多人認(rèn)為Live Photo和GIF沒有什么區(qū)別,不過存在即是合理。Live Photo有很多的優(yōu)勢,它可以像圖片一樣相互傳播,相較于短視頻它體積更小,與GIF相比它的畫質(zhì)質(zhì)量要高一些,而且音畫組合的方式使得圖片擁有了更多的信息??梢哉f,Live Photo的出現(xiàn)很好的解決了用戶需要在視頻預(yù)覽中截圖的問題。
Live Photo與普通照片一樣,也經(jīng)過嚴(yán)格的加密,除非是用戶分享或是使用iCloud,Live Photo將只能存儲(chǔ)在本機(jī)上。目前,蘋果向第三方開發(fā)者開放了LivePhoto的API接口,現(xiàn)在已經(jīng)有很多的社交軟件開始支持LivePhoto,像Facebook,還有第三方微博客戶端的墨客,美顏相機(jī)Biu等。
七牛初探Live Photo
現(xiàn)在各大社交應(yīng)用紛紛推出支持Live Photo。在運(yùn)營七牛產(chǎn)品過程中,我們發(fā)現(xiàn)越來越多的客戶如社交類、分享平臺(tái)、壁紙制作、漫畫等有對(duì)Live Photo的需求。我們開始嘗試做Live Photo的支持工作,并且已經(jīng)取得進(jìn)展,成為國內(nèi)首個(gè)支持Live Photo功能的云服務(wù)企業(yè)。
客戶的問題
Live Photo在傳統(tǒng)意義上是由兩個(gè)文件組成,一個(gè)是預(yù)覽的jpg,一個(gè)是播放的視頻mov。這樣在數(shù)據(jù)上傳的時(shí)候是兩種不同的文件類型,但是在用Live Photo中無法直接分離出單個(gè)的jpg和mov文件來上傳,如果直接用Live Photo上傳使用,在其他設(shè)備上又無法直接分解讀取,用PHAsset,目前只能得到image數(shù)據(jù),但是video數(shù)據(jù)無法得到。
有很多用戶需要在非iOS設(shè)備上查看類似Live Photo的效果,如安卓設(shè)備。但目前安卓還不支持mov的播放,雖然微博iOS版在年前就已經(jīng)宣布支持Live Photo,安卓版依然只能查看相應(yīng)的圖片,而沒有相應(yīng)的視頻播放。
七牛云存儲(chǔ)可以方便的將網(wǎng)站的圖片等數(shù)據(jù)鏡像到七牛云存儲(chǔ)的空間,直接從云端將數(shù)據(jù)返回給用戶。這樣可以大大節(jié)省網(wǎng)站的空間,提升網(wǎng)站的訪問速度。真正顯示一鍵實(shí)現(xiàn)WordPress博客靜態(tài)文件CDN加速。下面主要介紹一下WordPress中七牛云存儲(chǔ)插件的使用。
工具/原料
WordPress中七牛云存儲(chǔ)的插件
方法/步驟
首先需要申請(qǐng)七牛云存儲(chǔ)的賬號(hào),申請(qǐng)好后,點(diǎn)擊創(chuàng)建空間,選擇空間類型為公開空間,提交。
配置空間,點(diǎn)擊一鍵加速網(wǎng)站。鏡像源填寫自己網(wǎng)站域名。確認(rèn)加速。
接下來在WordPress后臺(tái)選擇添加我愛水煮魚的“WPJAM 七牛鏡像存儲(chǔ)”插件并啟用。進(jìn)入插件的基本設(shè)置頁面。
七牛綁定的域名:就是我們上面獲取的:。
*注意:如果博客安裝的是在子目錄下,比如
,這里
也需要帶上子目錄
/blog。比如:
七??臻g名:設(shè)置為我們一開始設(shè)置的wptest
ACCESS
KEY 和SCRET
KEY:可以在七牛后臺(tái)賬戶設(shè)置密鑰頁面獲取。
其他設(shè)置默認(rèn)即可。
我在這里寫下長篇大論,只希望小白們能跟快速入門。堅(jiān)持10個(gè)小時(shí) 堅(jiān)持10個(gè)小時(shí) 堅(jiān)持10個(gè)小時(shí)(重要的事情說三遍!!!)搭建出屬于自己的個(gè)人獨(dú)立博客,我將會(huì)通過 安裝流程主線+優(yōu)質(zhì)文章 作為參考。由于我本人是一名學(xué)生(非計(jì)算機(jī)專業(yè)),喜歡嘗試和不愿意人與亦云想要不一樣的人生打小喜歡折騰便開始了搭建自己獨(dú)立博客的道路,這路上可謂是路途兇險(xiǎn)和艱難費(fèi)了我九牛二虎之力解決,還是不夠完美,但我希望他完美,希望他可以記錄我的時(shí)光。作為一名技術(shù)小白,沒有技術(shù)基礎(chǔ)??吹骄W(wǎng)上教程更是玲瑯滿目直至眼花繚亂無從下手,講真,我從開始接觸到成功搭建花費(fèi)了不低于100小時(shí),走了很多彎路和誤區(qū), 希望通過本教程可以真心小白一個(gè)敢于嘗試的機(jī)會(huì)。我會(huì)將這篇教程寫仔細(xì),會(huì)將我出現(xiàn)過的問題給予解決方法。(同時(shí)這也是我第二次,就在前幾分鐘,電腦過熱,系統(tǒng)崩了,快寫完的教程沒有按Ctrl+S的情況不翼而飛了。我現(xiàn)在的內(nèi)心是崩潰的)但是我知道堅(jiān)持一會(huì),就可以完成了。
前言
天生倔強(qiáng)不愿屈服的我,總受想做出一番成績來,不愿意隨波逐流。我為什么要在這個(gè)博客已經(jīng)不盛行的時(shí)代去搭建屬于自己的博客?可以看看我之前寫的《重新認(rèn)識(shí)自己》和《我為什么那么懶?》。不去折騰怎么能知道自己不行?未知的東西太多,需要我們?nèi)W(xué)習(xí)和掌握的數(shù)不盡數(shù),唯有時(shí)刻保持這一份對(duì)新事物的好奇心并真心有心去堅(jiān)持下去。
疑問
先給大家預(yù)覽下我的博客目前最終版視己慎獨(dú),很多人用 wordpress,你為什么要用 github pages 來搭建?為什么要搭建一個(gè)獨(dú)立博客?獨(dú)立博客與微信公眾平臺(tái)有什么區(qū)別?
1、 無需購置服務(wù)器,目前的blog掛載在Github Pages,免服務(wù)器費(fèi)的同時(shí)還能做負(fù)載均衡;github pages有300M免費(fèi)空間,資料自己管理,保存可靠;學(xué)著用 github,享受 github 的便利,上面有很多大牛,眼界會(huì)開闊很多;github 是趨勢,像eleme這種互聯(lián)網(wǎng)大公司都在github上完成自己的項(xiàng)目;順便看看 github 工作原理,最好的團(tuán)隊(duì)協(xié)作流程;你不覺得一個(gè)文科生用 github 很 geek 嗎?瞬間躋身技術(shù)界。
2、獨(dú)立的才是自己的。在知乎上有這樣一個(gè)話題《GitHub 能作為衡量程序員能力的指標(biāo)嗎?》,在我看來獨(dú)立博客是喜歡嘗試新事物的人新一片天空,他們可以在這片天空中翱翔,他可以不太受拘束愛上些自由,他的內(nèi)心因他的不羈和外表不屈,愿意潛心研究深鉆其愛好,同時(shí)在這里他可以結(jié)實(shí)一大批有著共同的愛好的追夢人。對(duì)于小白,請(qǐng)保持記得那份好奇心,堅(jiān)持嘗試下去,繼續(xù)折騰。
3、公眾賬號(hào)是對(duì)所有人開放的,簡單申請(qǐng)即可使用,無需太多的挑戰(zhàn)。他僅僅只是一個(gè)平臺(tái)(對(duì)一般人來說)同時(shí)好好做運(yùn)營也似乎不是一件簡單的事情,沒有足夠的經(jīng)歷和精力是很難達(dá)到一個(gè)高度,也很難去傳播你的文化價(jià)值觀念。博客也只是一個(gè)平臺(tái),但是這里有你想要的,也是你的用武之地。公眾賬號(hào)是一個(gè)一對(duì)多的平臺(tái)很難利于交流盡管現(xiàn)在越來越人性化,這點(diǎn)你的博客很輕松就可以做到。更多的區(qū)別在此不多分析。
成功方向
1、安裝準(zhǔn)備軟件 Node.js、Git、GitHub DeskTop(前兩個(gè)必須安裝,后者可選)
2、本地搭建hexo框架、配置主題、修改參數(shù)、實(shí)現(xiàn)本地測試預(yù)覽
3、鏈接GitHub、實(shí)現(xiàn)在線預(yù)覽
4、購買域名并解析 (這里告訴大家一個(gè)方法,1元購買一個(gè)使用期限為一年.cn的域名 僅高校學(xué)生可以 )
5、日后站點(diǎn)的管理和運(yùn)營
紙上得來終覺淺,要知此事須舉行。世上無難事,就怕是懶人。以下以我的博客:blog.shijinrong.cn(shijinrong.cn是我一下行動(dòng))在windows下為例,教大家如何搭建一個(gè)獨(dú)立博客。
安裝流程
安裝準(zhǔn)備軟件
Node.js
Git
GitHub Desktop (可選)
以上幾個(gè)軟件均是英文版本,請(qǐng)小白不要害怕,敢于面對(duì)。安裝簡單,在此不做詳細(xì)介紹。
本地搭建hexo框架、配置主題
目錄
I.Hexo簡介
II.Hexo安裝方法
III.Hexo配置方法
IV.Hexo主題修改
V.Hexo部署方法
I.Hexo簡介
Hexo 是一個(gè)輕量的靜態(tài)博客框架。通過Hexo可以快速生成一個(gè)靜態(tài)博客框架,僅需要幾條命令就可以完成,相當(dāng)方便。
而架設(shè)Hexo的環(huán)境更簡單了 不需要 lnmp/lamp/XAMPP 這些繁瑣復(fù)雜的環(huán)境 僅僅需要一個(gè)簡單的http服務(wù)器即可使用 或者使用互聯(lián)網(wǎng)上免費(fèi)的頁面托管服務(wù)
比如本人的這個(gè)博客 就是托管于 GitHub Pages服務(wù)上
II.Hexo安裝方法
參考官網(wǎng)中文文檔,請(qǐng)嘗試者仔細(xì)讀教程和官方文檔。這步很簡單,正如官方網(wǎng)站寫的那樣只需要一條命令即可自動(dòng)安裝hexo框架。
$ npm install -g hexo-cli #使用 npm 安裝 Hexo。
初始化hexo
請(qǐng)參考hexo官方文檔,init命令中的就是文件夾aierui.github.io。初始化后,aierui.github.io里面就已經(jīng)有完整的Hexo框架了,這里可以在任意地方新建立一個(gè)文件夾并命名為aierui.github.io【不要問為什么】打開該文件,點(diǎn)擊鼠標(biāo)右鍵你會(huì)看到一個(gè)Git bash here點(diǎn)擊跳出git的黑窗口,輸入命令$ npm install,完成后,指定文件夾的目錄如下:
III.Hexo配置方法
熟悉hexo
為了讓讀者快速了解Hexo,我作幾個(gè)簡單介紹吧。當(dāng)然,更多的還是需要仔細(xì)閱讀文檔才能了解更詳細(xì)。
_config.yml 全局配置文件。要注意的是,該文件格式要求極為嚴(yán)格,缺少一個(gè)空格都會(huì)導(dǎo)致運(yùn)行錯(cuò)誤。小提示:不要用Tab縮進(jìn),兩個(gè)空格符, 冒號(hào):后面只用一個(gè)空格即可 。
themes 存放主題的文件夾
source 博客資源文件夾
source/_drafts 草稿文件夾
source/_posts 文章文件夾
themes/landscape 默認(rèn)皮膚文件夾
……
官方文檔中教詳細(xì)。
配置hexo
做一些基礎(chǔ)配置即可,請(qǐng)參考配置官方文檔,這里也可以省略,因?yàn)樵诤竺媾渲弥黝}NExt是也有提到這里的配置修改。
IV.Hexo主題修改
Hexo主題非常多,可以參考豐富多彩的Hexo主題,本文選Next為主題,樣式參考我的博客視己慎獨(dú)。
到這里我們還是采用參考官方文檔,5 分鐘快速安裝。在本地修改完這一連串的配置,(包括:語言設(shè)置、財(cái)產(chǎn)、菜單設(shè)置、側(cè)欄設(shè)置、頭像設(shè)置、作者名稱、站點(diǎn)描述、標(biāo)簽云頁面、分類頁面、統(tǒng)計(jì)系統(tǒng)、評(píng)論系統(tǒng)等等)現(xiàn)在是需要下面的一個(gè)命令即可在本地成功預(yù)覽你的博客樣式。
V.Hexo部署方法
寫完文章之后 就可以啟動(dòng)本地服務(wù)器測試了
$ hexo s #啟動(dòng)本地服務(wù)器測試
這個(gè)時(shí)候在瀏覽器中輸入端口 靜態(tài)的網(wǎng)站架設(shè)完成
當(dāng)你修改好你想要的樣式,包括頭像,favicon圖標(biāo),標(biāo)題樣式,第三方平臺(tái)鏈接等等等等你心中完美的頁面。那就可以繼續(xù)下一個(gè)階段了。再提示一點(diǎn),大家可以hexo主題修改一步就hexo s看下變化,初次接觸對(duì)參數(shù)不清楚。只有hexo s后在可以在本地瀏覽到效果,Ctrl+C 停止服務(wù)器。
鏈接GitHub、實(shí)現(xiàn)在線預(yù)覽
目錄
I.注冊GitHub
II.配置和使用 Github
III.SSH Key 配置成功
IV.實(shí)現(xiàn)在線預(yù)覽
現(xiàn)在已經(jīng)來到第三部分了,請(qǐng)你在堅(jiān)持一下。
I.注冊GitHub
訪問: 注冊你的username和郵箱,郵箱十分重要,GitHub上很多通知都是通過郵箱的。注冊過程比較簡單,在此我不再啰嗦。界面任然是英文,請(qǐng)讀者耐心一點(diǎn)。
II.配置和使用 Github
配置 SSH keys
我們?nèi)绾巫尡镜豨it項(xiàng)目與遠(yuǎn)程的github建立聯(lián)系呢?用SSH keys。
檢查 SSH keys的設(shè)置,首先我們需要檢查你電腦上現(xiàn)有的ssh key:
$ cd ~/.ssh 檢查本機(jī)的ssh密鑰
如果提示:No such file or directory 說明你是第一次使用git。
生成新的SSH Key:
$ ssh-keygen -t rsa -C "郵件地址@youremail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):回車就好
注意1: 此處的郵箱地址,你可以輸入自己的郵箱地址;注意2: 此處的「-C」的是大寫的「C」
然后系統(tǒng)會(huì)要你輸入密碼:
Enter passphrase (empty for no passphrase):輸入加密串
Enter same passphrase again:再次輸入加密串
在回車中會(huì)提示你輸入一個(gè)密碼,這個(gè)密碼會(huì)在你提交項(xiàng)目時(shí)使用,如果為空的話提交項(xiàng)目時(shí)則不用輸入。這個(gè)設(shè)置是防止別人往你的項(xiàng)目里提交內(nèi)容。
注意:輸入密碼的時(shí)候沒有*字樣的,你直接輸入就可以了。
最后看到這樣的界面,就成功設(shè)置ssh key了:
添加 SSH Key 到 GitHub
在本機(jī)設(shè)置SSH Key之后,需要添加到GitHub上,以完成SSH鏈接的設(shè)置。
1、打開本地C:\Documents and Settings\Administrator.ssh\id_rsa.pub文件。此文件里面內(nèi)容為剛才生成人密鑰。如果看不到這個(gè)文件,你需要設(shè)置顯示隱藏文件。準(zhǔn)確的復(fù)制這個(gè)文件的內(nèi)容,才能保證設(shè)置的成功。
2、登陸github系統(tǒng)。點(diǎn)擊右上角的 Account Settings—SSH Public keys — add another public keys
3、把你本地生成的密鑰復(fù)制到里面(key文本框中), 點(diǎn)擊 add key 就ok了
測試
可以輸入下面的命令,看看設(shè)置是否成功,git@github.com的部分不要修改:
$ ssh -T git@github.com
如果是下面的反饋:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
不要緊張,輸入yes就好,然后會(huì)看到:
Hi aierui! You've successfully authenticated, but GitHub does not provide shell access.
設(shè)置用戶信息
現(xiàn)在你已經(jīng)可以通過 SSH 鏈接到 GitHub 了,還有一些個(gè)人信息需要完善的。
Git 會(huì)根據(jù)用戶的名字和郵箱來記錄提交。GitHub 也是用這些信息來做權(quán)限的處理,輸入下面的代碼進(jìn)行個(gè)人信息的設(shè)置,把名稱和郵箱替換成你自己的,名字必須是你的真名,而不是GitHub的昵稱。
$ git config --global user.name "aierui"http://用戶名
$ git config --global user.email "imland@outlook.com"http://填寫自己的郵箱
III.SSH Key 配置成功
本機(jī)已成功連接到 github。若有問題,請(qǐng)重新設(shè)置。常見錯(cuò)誤請(qǐng)參考:
GitHub Help - Generating SSH Keys 和 GitHub Help - Error Permission denied (publickey)
IV.實(shí)現(xiàn)在線預(yù)覽
創(chuàng)建倉庫和本地遠(yuǎn)程到GitHub倉庫
首先在GitHub上創(chuàng)建一個(gè)倉庫repository,注意倉庫名稱必須為aierui.github.io,也是你之前在本地建立的文件夾名稱,這里由于存在這個(gè)名稱的倉庫,無法重名。
# 將當(dāng)前的改動(dòng)暫存在本地倉庫
$ git add .
# 將暫存的改動(dòng)提交到本地倉庫,并寫入本次提交的注釋是”first post“
$ git commit -m "first post"
# 將遠(yuǎn)程倉庫在本地添加一個(gè)引用:origin
$ git remote add origin
# 向origin推送gh-pages分支,該命令將會(huì)將本地分支gh-pages推送到github的遠(yuǎn)程倉庫,并在遠(yuǎn)程倉庫創(chuàng)建一個(gè)同名的分支。該命令后會(huì)提示輸入用戶名和密碼。
$ git push origin gh-pages
在GitHub上將gh-pages merge 到msater上
添加部署代碼
在站點(diǎn)的-config.yml文件新增字段
Deployment 站點(diǎn)部署到github要配置這里, 非常重要
deploy:
type: git 部署類型若有問題,其他類型自行g(shù)oogle之
repository:
branch: master
plugins: -hexo-generator-feed
merge后就可以部署上去了,在Git命令黑窗口里輸入
$ hexo g #生成靜態(tài)網(wǎng)頁
$ hexo d #開始部署
完成以上步驟,你算是成功了。在瀏覽器中輸入aierui.github.io(自己對(duì)應(yīng)即可)看到了你在本地搭建的博客主頁一樣,哇哇哇哇哇哇。開心死你了,不要忘了回來給我點(diǎn)贊呀~
Enjoy~
購買域名并解析
這一環(huán)節(jié)相對(duì)簡單,可以參考一步步在GitHub上創(chuàng)建博客主頁(3),
一元搞定域名(重頭戲)
僅限在校的高校學(xué)生,社會(huì)人士請(qǐng)自行繞開,老老實(shí)實(shí)花錢購買吧
廢話少說,直接上鏈接看我是怎么辦到的一元搞定域名還送服務(wù)器,全體咆哮。我們大家一起歡呼一起咆哮吧,哈哈哈。
云+校園計(jì)劃是騰訊云為在讀高校生量身打造的扶持計(jì)劃,旨在為高校生提供先進(jìn)的技術(shù)支持、資金扶持和經(jīng)驗(yàn)分享。同時(shí)讓更多高校生了解云計(jì)算及互聯(lián)網(wǎng)知識(shí),為后續(xù)職業(yè)、創(chuàng)業(yè)發(fā)展奠定基礎(chǔ)。
學(xué)生們請(qǐng)仔細(xì)研讀騰訊云官方論壇領(lǐng)取的規(guī)則參與領(lǐng)取
將獨(dú)立域名與 GitHub Pages 的空間綁定
DNS 設(shè)置
領(lǐng)取到域名后進(jìn)行解析,進(jìn)入到我的域名管理,添加域名,如下圖設(shè)置。我這里設(shè)置了一個(gè)三級(jí)域名blog,大家可以自行忽略。設(shè)置后訪問的就是blog.shijinrong.cn了,不是shijinrong.cn喲~~~~
其中A的兩條記錄指向的ip地址是github Pages的提供的ip
192.30.252.153
192.30.252.154
如博客不能登錄,有可能是 github 更改了空間服務(wù)的 ip 地址,記得及時(shí)到在GitHub Pages查看最新的ip即可
www 指定的記錄是你在 github 注冊的倉庫。
GitHub Pages 的設(shè)置
去到你的aierui.github.io 倉庫,點(diǎn)擊 CNAME(沒有自行創(chuàng)建) ,再點(diǎn)擊右下角的 鉛筆 編輯,將 blog.shijinrong.cn 改成你的域名
域名綁定成功,域名解析成功,因此你在瀏覽中輸入aierui.github.io或者現(xiàn)在blog.shijinrong.cn均可以訪問到主頁。
搭建成功快和小白自己不愿動(dòng)手說拜拜吧,同時(shí)也恭喜你成為博主。記得常聯(lián)系我喔~~嘻嘻
日后站點(diǎn)的管理和運(yùn)營
如何更新博文
下載博客模板的ZIP,去到你frok的倉庫地址:你的用戶名/你的用戶名.github.io。點(diǎn)擊右下角的Download ZIP,你會(huì)得到一個(gè)名為「你的用戶名.github.io-master.zip」的壓縮包。
安裝 github desktop管理你的博文
這里不再多贅述,可以看看官方文檔,有使用說明。
圖床
推薦使用七牛(10G空間,免費(fèi),配合Markdown使用簡單)。
MarkDown
百度一大堆教程,但是我還是推薦錘子科技錘子便簽做的教程。代碼板塊的MarkDown請(qǐng)讀者自行學(xué)習(xí)。
有的,我最近研究了一下,寫了一篇記錄,如下
原文地址:
網(wǎng)上關(guān)于七牛云存儲(chǔ)的教程除了官網(wǎng)上的API文檔,其他的資料太少了。研究了下API之后,現(xiàn)在已經(jīng)能實(shí)現(xiàn)圖片的上傳和下載及上傳之后的重定向。
首先本篇文章實(shí)現(xiàn)的功能如下:
1.利用表單上傳功能,用戶可以點(diǎn)擊選擇文件按鈕,選擇本地的一個(gè)文件,同時(shí)設(shè)定上傳的圖片的名稱,點(diǎn)擊上傳按鈕可以上傳并存儲(chǔ)到七牛云存儲(chǔ)。
2.在點(diǎn)擊上傳時(shí)會(huì)檢測文件的后綴名,限制為jpg和png格式存儲(chǔ)。
3.上傳成功后跳轉(zhuǎn)到自己設(shè)定的一個(gè)URL,并傳回文件信息,如文件名。而不是顯示七牛白花花的json顯示頁面。
好啦,那我們開始吧,首先我們要有一個(gè)七牛云存儲(chǔ)賬號(hào),如果沒有的就自己去申請(qǐng)吧。
七牛云存儲(chǔ)傳送門:
一.SDK下載
戳這個(gè)網(wǎng)址下載一下SDK吧,里面封裝了文件上傳下載等等的方法,我們引入之后可以直接調(diào)用。
SDK之中有一個(gè)qiniu的文件夾,這是所有的SDK實(shí)貨,這個(gè)是最重要的。我們首先要把這個(gè)文件夾及里面的文件放到項(xiàng)目文件夾中,比如我放到這里。
大家可以看到有一個(gè)qiniu文件夾。好啦,資源支持就是這樣。接下來我們要實(shí)現(xiàn)代碼咯。
二.文件的上傳。
1.首先把你七牛云存儲(chǔ)的密鑰照出來,點(diǎn)擊賬號(hào)設(shè)置可以看到有一個(gè)AccessKey和SecretKey,留著備用。
2.上傳憑證生成。
在這里我們首先要引入rs.php文件,自己找一對(duì)應(yīng)路徑,代碼如下:
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
dirname()是指的絕對(duì)路徑,有時(shí)相對(duì)路徑會(huì)出現(xiàn)問題,建議在前面加上dirname方法獲取絕對(duì)路徑。
require_once是引入文件,表示該文件只引入一次。
然后,傳入你的AccessKey和SecretKey
代碼如下:
$accessKey?=?'Imn35KC5pRX7Ov3scxbYkvNk6oIx7zWsBRp16';??//換成你自己的密鑰
$secretKey?=?'s29vc9tlCvs23wRh7QScYTuzCDmEroKj1ddssz';????//換成你自己的密鑰
Qiniu_SetKeys($accessKey, $secretKey);
然后建一個(gè)上傳策略對(duì)象,將你的bucket?傳入,bucket 就是你的空間名。
$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
然后調(diào)用此方法來生成上傳憑證。
$upToken = $putPolicy-Token(null);
接下來就寫一個(gè)html表單
form?method="post"?action=""?name?=?"form"?enctype="multipart/form-data"
ul
input?type="hidden"??id="token"?name="token"??value=?php?echo?$upToken?
li
label?for="key"key:/label
input?name="key"?value=""
/li
li
label?for="bucket"照片:/label
input?name="file"??type="file"?/
/li
li
input?type="submit"?value="提交"?
/li
/ul
/form
action?就填寫?up.qiniu.com,表單提供了一個(gè)輸入框key,用來輸入你想保存的圖片名稱,上傳到七牛之后就是這個(gè)名字。
然后一個(gè)文件選擇,一個(gè)提交按鈕。運(yùn)行結(jié)果如下:
輸入key值和選擇照片即可實(shí)現(xiàn)照片的上傳。哈哈哈有沒有很簡單。
三、文件下載
原理和文件上傳功能相仿。
引入文件
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
聲明你的七牛云存儲(chǔ)域名和兩個(gè)密鑰以及向下載的文件名稱
$key?=?'00000';
$domain?=?'designpartners.qiniudn.com';
$accessKey?=?'IOImn35KC5p3scxbYkvNk6oIxB7zWsBRp16';
$secretKey?=?'s29vc9tlCvs23wCDmIbUSi4EroKj1z';
注意:1.key值即為文件名,不要加后綴
2.domain即為bucket加上qiniudn.com,例子中的designpartners就是我在上傳圖片時(shí)用的bucket名。
3.accessKey和secretKey換成你自己的,直接用我的不行的..因?yàn)槲倚薷牧?
Qiniu_SetKeys($accessKey,?$secretKey);??
$baseUrl?=?Qiniu_RS_MakeBaseUrl($domain,?$key);
$getPolicy?=?new?Qiniu_RS_GetPolicy();
$privateUrl?=?$getPolicy-MakeRequest($baseUrl,?null);
echo?$privateUrl?.?"\n";
傳入這四個(gè)值即可生成一樣url,直接訪問url即可實(shí)現(xiàn)圖片的下載。
在引入圖片時(shí)直接
img src = "?php echo $privateUrl; ?"/
即可引入圖片咯,很簡單的吧。
四、303重定向
在上面的方法中,我們上傳圖片成功后跳轉(zhuǎn)到up.qiniu.com下,會(huì)顯示白白的網(wǎng)頁,顯示一個(gè)json字符串,但是在實(shí)際網(wǎng)站開發(fā)中我們肯定 不能讓用戶看到這種網(wǎng)頁,所以我們用到了303跳轉(zhuǎn)。SDK中也為我們封裝了這個(gè)方法。使用其實(shí)非常簡單。在上傳文件的代碼中添加兩行代碼即可
$putPolicy?=?new?Qiniu_RS_PutPolicy($bucket);
$putPolicy-ReturnUrl?=?site_url()."/upload/receiveInfo";
$putPolicy-ReturnBody='{"key":?$(key)}';
注意:1.?ReturnUrl和ReturnBody必須指定,并且首字母要大寫,很多人都小寫開頭,這樣會(huì)跳轉(zhuǎn)不成功。
2.ReturnUrl必須是一個(gè)公網(wǎng)可以訪問的網(wǎng)址,在本地測試是不可能通過的。比如你寫成localhost,七牛服務(wù)器是定位不到的。
3.這個(gè)ReturnUrl的鏈接后會(huì)跟著一個(gè)?upload_ret=XXX,可以用get方法獲取這個(gè)upload_ret。upload_ret的內(nèi)容是base64安全編碼的json形式的key值。
值的解析:比如我上傳的文件名是555
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
網(wǎng)址后綴如上所示,把那個(gè)upload_ret復(fù)制下來,用base64解碼可以出現(xiàn)如下結(jié)果:
{"key": "555"}
所以,我們要獲取555這個(gè)值的代碼如下,即解析代碼如下:
$upload_ret?=?$_GET['upload_ret'];
$json_ret?=?base64_decode($upload_ret);
$result=json_decode($json_ret);
echo?"key".$result-key;
好啦,獲取到這個(gè)key值之后,你可以選擇存到數(shù)據(jù)庫或者進(jìn)行其他的操作咯。
五、上傳前文件類型的驗(yàn)證
我們可以用js來驗(yàn)證文件的后綴名,
在form的屬性里加上
onsubmit="return isValidateFile('file');"
加上一個(gè)js方法
script
function?isValidateFile(obj)?{
var?extend?=?document.form.file.value.substring(document.form.file.value.lastIndexOf(".")?+?1);
if?(extend?==?"")?{
alert("請(qǐng)選擇頭像");
return?false;
}
else?{
if?(!(extend?==?"jpg"?||?extend?==?"png"))?{
alert("請(qǐng)上傳后綴名為jpg或png的文件!");
return?false;
}
}
return?true;
}
/script
即可驗(yàn)證它的類型是否合法。
附:CI代碼實(shí)現(xiàn):
獲取Uptoken:
function?getUptoken(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
//遠(yuǎn)程存儲(chǔ)空間名稱
$bucket?=?'designpartners';
$accessKey?=?'IOImn35KCRX7Ov3scvNk6oIxB7zWsBRp16';
$secretKey?=?'s29vc9tlCvs23wRhTuzCDmIbUSi4EroKj1z';
Qiniu_SetKeys($accessKey,?$secretKey);
$putPolicy?=?new?Qiniu_RS_PutPolicy($bucket);
echo?site_url();
$putPolicy-ReturnUrl?=?site_url()."/upload/receiveInfo";
$putPolicy-ReturnBody='{"key":?$(key)}';
$upToken?=?$putPolicy-Token(null);
return?$upToken;
}
文件上傳:
public?function?uploadPic(){
$upToken?=?$this-getUptoken();
$data['upToken']?=?$upToken;
$this-load-view('upload',$data);
}
303重定向解析:
public?function?receiveInfo(){
$upload_ret?=?$_GET['upload_ret'];
$json_ret?=?base64_decode($upload_ret);
$result=json_decode($json_ret);
echo?"key".$result-key;?
}
文件下載:
public?function?downloadPic(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
$key?=?'00000';
$domain?=?'designpartners.qiniudn.com';
$accessKey?=?'IOImn35KC57Ov3scxbYkvNk6oIxB7zWsBRp16';
$secretKey?=?'s29vc9tlCvsh7QScYTuzCDmIbUSi4EroKj1z';
Qiniu_SetKeys($accessKey,?$secretKey);??
$baseUrl?=?Qiniu_RS_MakeBaseUrl($domain,?$key);
$getPolicy?=?new?Qiniu_RS_GetPolicy();
$privateUrl?=?$getPolicy-MakeRequest($baseUrl,?null);
echo?"====?getPolicy?result:?\n";
echo?$privateUrl?.?"\n";
}
表單:
script
function?isValidateFile(obj)?{
var?extend?=?document.form.file.value.substring(document.form.file.value.lastIndexOf(".")?+?1);
if?(extend?==?"")?{
alert("請(qǐng)選擇頭像");
return?false;
}
else?{
if?(!(extend?==?"jpg"?||?extend?==?"png"))?{
alert("請(qǐng)上傳后綴名為jpg或png的文件!");
return?false;
}
}
return?true;
}
/script
form?method="post"?action=""?name?=?"form"?enctype="multipart/form-data"?onsubmit="return?isValidateFile('file');"
ul
input?type="hidden"??id="token"?name="token"??value=?php?echo?$upToken?
li
label?for="key"key:/label
input?name="key"?value=""
/li
li
label?for="bucket"照片:/label
input?name="file"??type="file"?/
/li
li
input?type="submit"?value="提交"?
/li
/ul
/form