七牛雲存儲圖片上傳
❶ 關於SpringBoot上傳圖片的幾種方式
1. 直接上傳到指定的伺服器路徑;
2. 上傳到第三方內容存儲器,這里介紹將圖片保存到七牛雲
3. 自己搭建文件存儲伺服器,如:FastDFS,FTP伺服器等
❷ php表單上傳圖片到七牛雲存儲並返回地址……求具體流程~有代碼更好
有的,我最近研究了一下,寫了一篇記錄,如下
原文地址:http://cuiqingcai.com/?p=157
網上關於七牛雲存儲的教程除了官網上的API文檔,其他的資料太少了。研究了下API之後,現在已經能實現圖片的上傳和下載及上傳之後的重定向。
首先本篇文章實現的功能如下:
1.利用表單上傳功能,用戶可以點擊選擇文件按鈕,選擇本地的一個文件,同時設定上傳的圖片的名稱,點擊上傳按鈕可以上傳並存儲到七牛雲存儲。
2.在點擊上傳時會檢測文件的後綴名,限制為jpg和png格式存儲。
3.上傳成功後跳轉到自己設定的一個URL,並傳迴文件信息,如文件名。而不是顯示七牛白花花的json顯示頁面。
好啦,那我們開始吧,首先我們要有一個七牛雲存儲賬號,如果沒有的就自己去申請吧。
七牛雲存儲傳送門:http://www.qiniu.com/
一.SDK下載
https://github.com/qiniu/php-sdk/tags
戳這個網址下載一下SDK吧,裡面封裝了文件上傳下載等等的方法,我們引入之後可以直接調用。
SDK之中有一個qiniu的文件夾,這是所有的SDK實貨,這個是最重要的。我們首先要把這個文件夾及裡面的文件放到項目文件夾中,比如我放到這里。
大家可以看到有一個qiniu文件夾。好啦,資源支持就是這樣。接下來我們要實現代碼咯。
二.文件的上傳。
1.首先把你七牛雲存儲的密鑰照出來,點擊賬號設置可以看到有一個AccessKey和SecretKey,留著備用。
2.上傳憑證生成。
在這里我們首先要引入rs.php文件,自己找一對應路徑,代碼如下:
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
dirname()是指的絕對路徑,有時相對路徑會出現問題,建議在前面加上dirname方法獲取絕對路徑。
require_once是引入文件,表示該文件只引入一次。
然後,傳入你的AccessKey和SecretKey
代碼如下:
$accessKey='';//換成你自己的密鑰
$secretKey='';//換成你自己的密鑰
Qiniu_SetKeys($accessKey, $secretKey);
然後建一個上傳策略對象,將你的bucket傳入,bucket 就是你的空間名。
$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
然後調用此方法來生成上傳憑證。
$upToken = $putPolicy->Token(null);
接下來就寫一個html表單
<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>
action就填寫up.qiniu.com,表單提供了一個輸入框key,用來輸入你想保存的圖片名稱,上傳到七牛之後就是這個名字。
然後一個文件選擇,一個提交按鈕。運行結果如下:
輸入key值和選擇照片即可實現照片的上傳。哈哈哈有沒有很簡單。
三、文件下載
原理和文件上傳功能相仿。
引入文件
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
聲明你的七牛雲存儲域名和兩個密鑰以及向下載的文件名稱
$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';
注意:1.key值即為文件名,不要加後綴
2.domain即為bucket加上qiniudn.com,例子中的designpartners就是我在上傳圖片時用的bucket名。
3.accessKey和secretKey換成你自己的,直接用我的不行的..因為我修改了.
Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo$privateUrl." ";
傳入這四個值即可生成一樣url,直接訪問url即可實現圖片的下載。
在引入圖片時直接
<img src = "<?php echo $privateUrl; ?>"/>
即可引入圖片咯,很簡單的吧。
四、303重定向
在上面的方法中,我們上傳圖片成功後跳轉到up.qiniu.com下,會顯示白白的網頁,顯示一個json字元串,但是在實際網站開發中我們肯定 不能讓用戶看到這種網頁,所以我們用到了303跳轉。SDK中也為我們封裝了這個方法。使用其實非常簡單。在上傳文件的代碼中添加兩行代碼即可
$putPolicy=newQiniu_RS_PutPolicy($bucket);
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';
注意:1.ReturnUrl和ReturnBody必須指定,並且首字母要大寫,很多人都小寫開頭,這樣會跳轉不成功。
2.ReturnUrl必須是一個公網可以訪問的網址,在本地測試是不可能通過的。比如你寫成localhost,七牛伺服器是定位不到的。
3.這個ReturnUrl的鏈接後會跟著一個?upload_ret=XXX,可以用get方法獲取這個upload_ret。upload_ret的內容是base64安全編碼的json形式的key值。
值的解析:比如我上傳的文件名是555
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
網址後綴如上所示,把那個upload_ret復制下來,用base64解碼可以出現如下結果:
{"key": "555"}
所以,我們要獲取555這個值的代碼如下,即解析代碼如下:
$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;
好啦,獲取到這個key值之後,你可以選擇存到資料庫或者進行其他的操作咯。
五、上傳前文件類型的驗證
我們可以用js來驗證文件的後綴名,
在form的屬性里加上
onsubmit="return isValidateFile('file');"
加上一個js方法
<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>
即可驗證它的類型是否合法。
附:CI代碼實現:
獲取Uptoken:
functiongetUptoken(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
//遠程存儲空間名稱
$bucket='designpartners';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$putPolicy=newQiniu_RS_PutPolicy($bucket);
echosite_url();
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';
$upToken=$putPolicy->Token(null);
return$upToken;
}
文件上傳:
publicfunctionuploadPic(){
$upToken=$this->getUptoken();
$data['upToken']=$upToken;
$this->load->view('upload',$data);
}
303重定向解析:
publicfunctionreceiveInfo(){
$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;
}
文件下載:
publicfunctiondownloadPic(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo"====>getPolicyresult: ";
echo$privateUrl." ";
}
表單:
<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>
<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data"onsubmit="returnisValidateFile('file');">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>
❸ 七牛FOP有什麼優勢
七牛FOP 就是七牛的數據處理,例如在一個查看圖片的場景中,七牛雲客戶端可以上傳一張高精度的圖片,然後在查看圖片的時候根據屏幕規格生成一張大小適宜的縮略圖,例如為 iPhone生成一張 960x640 大小的縮略圖。這樣既可以明顯降低網路流量,而且可以提高圖片顯示速度,還能降低移動設備的內存佔用,同時還具備著三個優點,可以就近無縫對接對象存儲服務,數據存儲在哪裡就在哪裡計算的原則,無需任何復雜的配置就可以馬上使用七牛提供的數據處理單元;可以處理單元微服務化以及管道機制的引入,大 大增加了業務實現的自由度;可以實時任務與非同步任務結合,讓用戶的各種業務場景都得以靈活實現。
❹ 前端上傳圖片頭像到七牛雲格式變成text
流程:七牛雲後台的對象存儲功能,nodejs後台生成七牛雲的token,前端利用elementUI/ice的upload組件,文件名和token作為參數請求到七牛雲後台。
配置已經完成,寫介面用的是express,koa同理,主要做法是先接收前端的圖片流轉換成圖片寫入本地image文件中,然後再存儲到七牛雲,再將本地生成的圖片刪除,需要新建一個image文件夾
❺ 七牛雲存儲對接好網站後上傳不了圖片,但是能獲取存儲空間里的文件
首先我們先登錄阿里旺旺賬號,在阿里旺旺面板的下方有一個「淘」字樣,單擊該按鈕。
單擊「淘」按鈕,會下拉很多選項,在下拉的選項里,我們單擊圖片空間按鈕。
單擊圖片空間會跳到如圖所示頁面,這時我們單擊菜單欄里的「圖片上傳」按鈕。
單擊「圖片上傳」按鈕會出現如圖所示,這時我們點擊添加圖片按鈕。點擊之後會彈出第二個圖的對話框,這時我們選擇好要上傳的圖片,選擇好後單擊下方的「選好了」按鈕。
單擊之後會彈出如圖對話框,這時我們單擊下方的立即上傳按鈕,點擊之後就會彈出第二個圖片所示對話框。
在彈出的對話框里,我們單擊完成按鈕,頁面會跳到如圖所示,這時我們可以看到剛才的圖片已經在圖片空間里了。
❻ 我為什麼最終選擇了七牛雲存儲
說實話,當初在用又拍雲的時候,遇到了一些麻煩,因為我一開始不知道該怎麼操作,其操作界面不是很人性化,弄了半天才弄明白怎麼樣新建一個空間,新建空間之後,還需要用 FTP 軟體來管理這個空間的內容,在 Mac 上找到一個靠譜的FTP 管理工具並不容易,我試用了FileZilla 這個軟體,使用和配置 FTP 又花了我不少功夫。
反觀七牛則是一目瞭然,從新建空間、配置空間、上傳文件、獲取外鏈,全部都是在網頁中可以完成簡易的可視化操作:
在管理後台,無論是使用還是統計都是一目瞭然:
以我上傳一張照片並獲取外鏈供博客使用為例,比較一下又拍雲和七牛雲的流程:
又拍雲
1.打開並登錄 FTP 工具;
2.上傳圖片;
3.復制圖片名
4.在博客管理後台輸入外鏈路徑+圖片名(這一點最為麻煩,每次都需要手動輸入一長串鏈接地址)
七牛雲
1.直接在網頁管理後台上傳圖片(這個界面很友好,和 wordpress 的圖片上傳界面類似)
2.直接獲取復制完整外鏈即可(注意右側的圖片預覽功能,這個對於圖片多了之後防止誤操作很是實用)
相比之下,顯然是七牛雲在操作使用上更加簡便易行。
可視化圖片處理設置
在數據處理環節,七牛雲也比較方便,比如我的博客圖片寬度不能超過550px,否則會撐破主題,並且想加上一個@望月的水印,那麼就可以在數據處理界面進行設置。
這樣,就不用在博客後台每次添加圖片之後都去重新調整一下大小,也不用使用圖片修改軟體去添加水印之類的了。
免費的使用空間和流量
對於新用戶,七牛雲存儲免費贈送10G 的使用空間+10G/月的流量,對於小博客來說,是完全夠用了,推薦朋友還可以免費獲取空間,如果你有需要,可以通過我的推薦鏈接注冊七牛,也可以幫我增加一些免費空間和流量,謝謝。
同時,通過36Kr 的活動頁面,還可以獲取800元的代金券和85折的協議價進行續費充值。
即使是流量、存儲空間和數據請求超出,七牛的價格也相對便宜。
一鍵加速功能
除此之外,還很是喜歡七牛雲的一鍵加速網站功能,也就是鏡像存儲,源站資源(文件/圖片等)根據初次訪問自動同步到七牛雲存儲,數據平滑遷移。可使用綁定的自定義域名訪問鏡像存儲的源站資源。格式:http://綁定域名/源站資源相對路徑。
還可以配合使用七牛鏡像存儲 WordPress 插件一鍵實現 WordPress 博客靜態文件 CDN 加速。
其實,七牛雲在圖片存儲和使用方面的便捷就足夠打動我了,綜合來說,七牛雲存儲設計更加人性化、操作更加簡便,價格更加適中,無論是對於博客用戶還是開發者用戶,都是個不錯的選擇。
❼ ueditor1.4.3 php如何上傳圖片到圖片伺服器(七牛)
現在有新版本你要的功能實現了,
UEditor1.4.3版本-直接上傳視頻、附件、圖片到七牛雲存儲,並且支持圖片在線管理功能
❽ 不知道怎麼上傳文件到七牛雲上,大神們有步驟嗎
七牛雲上傳文件的方法還挺多的,我說2種常用的方法,第一種:在七牛雲找到控制台界面的對象存儲--空間管理--文件管理,選擇文件進行上傳。
第二種方法:選用服務端SDK進行上傳,建議先參閱服務端SDK文檔,可以在七牛雲的SDK&工具欄目下找文檔查看,當前七牛雲僅提供文檔中已有的相關SDK。
❾ 初次使用七牛雲存儲,請問這是什麼問題
使用七牛雲存儲解決ios7.1的app部署問題
一.問題描述
開發完ios版本的app。需要將.ipa文件和.plist文件打包上傳,供用戶下載,在線安裝。用戶安裝過程簡單描述如下:
首先通過手機瀏覽器safari或者掃描二維碼獲取到下載.plist的地址。然後瀏覽器會自動跳轉到這個地址,下載、讀取.plist。(用戶跳轉的地址是.plist的下載地址。)這個過程,顯然使用http協議來下載.plist文件。最後,iphone通過讀取.plist文件中配置的.ipa下載地址,來安裝.ipa文件,來完成ios版本的app。
舉例,網站首頁中,下載.plist的代碼:
<ahref="itms-services://?action=download-manifest&url=http://www.ekwing.com/ekwing.plist"class="mobile-ios"></a>
但是,蘋果從ios7.1開始,用戶安裝app,需要使用https協議,來下載plist文件。也就說,在安裝app的第一步,下載.plist文件,需要使用https協議。https協議如下:
這里不詳細描述https協議。HTTPS的信任繼承基於預先安裝在瀏覽器中的證書頒發機構(如VeriSign、Microsoft等)(意即「我信任證書頒發機構告訴我應該信任的」)。因此,一個到某網站的HTTPS連接可被信任,當且僅當:
1. 用戶相信他們的瀏覽器正確實現了HTTPS且安裝了正確的證書頒發機構;
2. 用戶相信證書頒發機構僅信任合法的網站;
3. 被訪問的網站提供了一個有效的證書,意即,它是由一個被信任的證書頒發機構簽發的(大部分瀏覽器會對無效的證書發出警告);
4. 該證書正確地驗證了被訪問的網站(如,訪問https://example時收到了給「Example Inc.」而不是其它組織的證書);
5. 或者互聯網上相關的節點是值得信任的,或者用戶相信本協議的加密層(TLS或SSL)不能被竊聽者破壞。
簡單描述,用戶使用https來下載.plist文件。則需要網站支持https協議。支持https協議,除了服務端做一些配置外,還需要申請一個數據簽名證書。這個簽名證書是由簽發機構簽發的。不能自己配置生成。而申請簽名證書需要一段時間。而我們的目的只是希望能夠讓我們的app被用戶正常下載安裝即可。
二.問題分析
解決該問題,就2個方法:
1.自己網站服務上配置https服務,並購買數字簽名證書以保證每種類型及其不同版本的瀏覽器能夠安裝了證書頒發機構頒發的,我們購買的數據簽名證書。時間開銷7天左右。
2.將app文件託管到支持https協議的第三方伺服器上。
三.解決問題
使用七牛雲存儲,可以快速,免費解決這個問題。只需要到http://www.qiniu.com/注冊一個賬號。然後,開通https協議的域名即可。最後將.plist和.ipa文件上傳到七牛雲存儲上即可。操作過程,非常簡單。只要注意幾點:
1. 開通一個http協議的域名,和一個https協議的域名。
如上圖。後綴名是.qiniudn.com的是支持http協議的域名。後綴名是.qbox.me的是支持https協議的域名。上傳.plist、.ipa到七牛雲存儲。
2. 修改下載.plist文件的地址,修改.plist文件內容。
網站首頁,下載.plist地址改成上傳到七牛雲存儲上的支持https協議(域名後綴名是.qbox.me)的下載鏈接地址。
<ahref="itms-services://?action=download-manifest&url=https://dn-ekwing.qbox.me/ekwing.plist"class="mobile-ios"></a>
3. 將.plist文件內容中,.ipa的下載地址,改成七牛雲存儲上的支持http協議(後綴名是.qiniudn.com)
<string>http://ekwing.qiniudn.com/ekwing.ipa</string>
4. 總結,.plist的下載用https協議,而.ipa的下載用http協議即可。修改完後,就可應用ios6、ios7、ios7.1進行測試了。
四. 感謝七牛雲存儲
感謝七牛運存儲提供免費服務。不過,目前防盜鏈還不能用。希望能夠加上防盜鏈功能。
五. 因ios7.1安裝app,需要用https協議而提示的錯誤
無法安裝應用程序因為證書無效
<Warning>:[ERROR]: Cannot load non-https manifest URL:http://192.168.1.22/ekwing.plist
<Warning>:Could not load download manifest with underlying error: ErrorDomain=SSErrorDomain Code=128 "無法連接" UserInfo=0x1669d990 {NSLocalizedDescription=無法連接}
<Warning>: NSURLConnection/CFURLConnection HTTP loadfailed (kCFStreamErrorDomainSSL, -9813)
<Warning>: Could not load download manifest withunderlying error: Error Domain=NSURLErrorDomain Code=-1202 "無法連接到商店" UserInfo=0x166bc640{NSLocalizedDescription=無法連接到商店,NSLocalizedRecoverySuggestion=您仍要連接此伺服器嗎?,NSLocalizedFailureReason=無法建立安全連接。請檢查「日期與時間」設置。,NSErrorFailingURLStringKey=https://192.168.1.22/ekwing.plist,NSUnderlyingError=0x165b37e0 "此伺服器的證書無效。您可能正在連接到一個偽裝成「192.168.1.22」的伺服器,這會威脅到您的機密信息的安全。",=<SecTrustRef:0x166b83e0>,NSErrorFailingURLKey=https://192.168.1.22/ekwing.plist}