A. 如何將圖片上傳到七牛雲平台
上一篇文章介紹了「如何將圖片上傳到Cloudinary雲平台?」
但是由於Cloudinary的伺服器在國外,所以上傳和讀取圖片的速度會很慢,不適合用作生產,因此有必要再介紹一下國內廣受歡迎的「七牛」雲平台。以及分步驟給大家介紹如何使用七牛。
各位可以使用我的邀請鏈接注冊: https://portal.qiniu.com/signup?code=3l7nsvonfkxn6
拜託!!!
我們這里添加的對象存儲空間叫做「gougouavatar」
其中的ACCESS_KEY和SECRET_KEY兩個參數來自於「個人中心」的「秘鑰管理」模塊:
_getQiniuToken()返回一個封裝promise函數,這個函數調用了後台生成簽名演算法的介面;
這個函數的回調里拿到了後台生成的key和其他參數;
最後調用_upload方法向七牛的上傳圖片的介面地址: http://upload.qiniu.com ,發送請求,上傳圖片;
最後的響應參數response.key即為圖片上傳成功之後的地址。
如:deae507d-73fd-4489-9d7f-d5fa275bcbe5.jpeg
想要訪問該圖片,還需拼接上七牛提供的測試域名:
經過測試,使用七牛進行上傳的速度確實很快,比國外的cloudinary要快上好幾倍,使用體驗還是很不錯的,大家可以放心使用。
B. Swift使用七牛上傳圖片的一些坑
七牛隻有Objective-C的庫沒有Swift的庫 , 所以需要橋接。橋接的方法不用多少了,網上一大堆教程
七牛oc的SDK地址: http://developer.qiniu.com/docs/v6/sdk/objc-sdk.html
可以使用cocoaPods直接引入 pod "Qiniu", "~> 7.0"
因為七牛有使用AFNetworking 和 HanekeSwift 庫,所引入的時候要引入這兩個
一般微信、微博SDK橋接,我們直接簡單的這樣就行了
但是七牛你這樣導入 就會報錯 , 一直說找不到文件。
你需要這樣
現在好了,不報錯了。滿心歡喜的開始使用SDK, 我想上傳本地相冊的照片 , 用的PhotoKit拿到的是 PHAsset 對象 , 看了下官方的例子 :
一看就是傳入NSData類型的數據,傳入一個key ,繼續很happy的將它轉成swift的格式,info.statusCode 為200的時候是成功 。 然後根據自己的PHAsset拿到UIImage對象 , 將UIImage對象再轉成NSData類型的對象。傳入後返回statusCode 200很開心成功了。
然而 ,從伺服器down下來 ,圖片格式.81 .223之類的,什麼鬼不是成功了嗎。。。。。
好吧,伺服器返回的連接是亂的錯得。 去看七牛的API ,原來有各種put的方法 putFile , putPHAsset 。。。。等等 。尼瑪。還是太年輕呀。。
最後用了putPHAsset返回的連接還是錯的,最後看api說key可以為nil,這樣的話七牛隨機生成,我傳入了nil後,成功了。
token是從自己伺服器上取嗒。問題終於解決了,關鍵是網路居然沒搜到這樣問題。還是我太年輕。。。記錄下吧。
C. 安卓批量上傳圖片到七牛的兩種方法
安裝七牛SDK,因為我們項目需要每個文件必須要一個token,也可以獲取一個token然後客戶端自己用拼接key
註:如果自己拼接key最後是時間戳加上圖片的下標,不然容易因為上傳時間過快導致時間戳一樣,造成上傳失敗。當初寫iOS上傳自己拼接key的時候遇到過這個問題。
創建一個工具類QiNiuUploadUtil,
初始化七牛的上傳工具類UploadManager
然後創建回調介面QiNiuUploadCompletionHandler
因為本項目圖片多選都用PictureSelector選擇器所提上傳圖片數組 類型為LocalMedia,這個根據自己項目來改
D. 不知道怎麼上傳文件到七牛雲上,大神們有步驟嗎
七牛雲上傳文件的方法還挺多的,我說2種常用的方法,第一種:在七牛雲找到控制台界面的對象存儲--空間管理--文件管理,選擇文件進行上傳。
第二種方法:選用服務端SDK進行上傳,建議先參閱服務端SDK文檔,可以在七牛雲的SDK&工具欄目下找文檔查看,當前七牛雲僅提供文檔中已有的相關SDK。
E. Thinkphp6上傳圖片七牛雲 如何上傳文件到七牛雲對象儲存cos
ThinkPHP6 如何上傳圖片七牛雲,如何上傳文件到七牛雲對象儲存cos,總所周知圖片是特別消耗網站帶寬的,個人網站將圖片上傳至七牛雲才能顯著提升網站的響應速度,手把手交大家如何上配置ThinkPHP6上傳文件至七牛雲.
然後我們就可以使用 $url=Qiniu::upload($filePath,$filename); 傳入文件的相對路徑或絕對路徑加上文件名,在文件上傳成功後自動又將圖片上傳至七牛雲~
F. Vue 上傳圖片到七牛雲實用攻略
vue 一般採用element 的upload 上傳圖片/文件。
首先,設定參數
參考Element upload 文檔
其次,如圖所示,重點在於domain和qiniuaddr兩個參數! 參考 七牛雲存儲圖片域名文檔
然後 上傳一定要先獲取到七牛雲token!我是採用axios post獲取。
接著,把返回的 file.name賦值給 key
this.QiNiuYun.key = `name_${file.name}`;
如圖 上傳成功/錯誤處理 函數
大功告成!
補充:
1. this.uploadImageUrl 這個變數實際上是 圖片真正的URL-----https地址!!!
2. 該方法是針對單圖上傳,如果想多圖 將data 內的參數 limit:1 修改為需要的圖片數量 !!!
3. 注意!當後台需要你傳遞多張圖片的url時,可採用 此方法!!!
//拼接 url
if(this.uploadImageList===''){
this.uploadImageList= this.uploadImageUrl;
}else{
this.uploadImageList=this.uploadImageList+';'+ this.uploadImageUrl;
}
G. 圖片上傳七牛token失效
由於公司後台web需要兼容到 IE8 ,對上傳圖片的模塊進行了修改,本來是運用 h5自帶的 上傳文件方法,但是在 IE8,9 中原生js不支持 input=file ,所以參照了七牛提供的上傳方法。
圖片上傳到七牛需要先獲取 token ,開始時沒有想到token會失效的問題,通過QA測試發現偶爾會報 七牛Post 401的錯誤。 今在七牛上傳提供方法err的時候在調用一次獲取token的方法。
H. 如何配置uEditor上傳到七牛雲 伺服器為Java
現在有新版本你要的功能實現了, UEditor1.4.3版本-直接上傳視頻、附件、圖片到七牛雲存儲,並且支持圖片在線管理功能
I. 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>
J. 七牛雲上傳圖片報 400錯誤的一些小坑
最近遇到的坑,後台返回的token和filename都沒有問題,上傳圖片還是報code400,最後發現是因為後端申請七牛雲的時候填寫的伺服器是華南區 而SDK里默認是華東區,導致上傳失敗。
步驟一:先搜索七牛SDK里的zone0(圖一)
步驟二:查看後台申請的區域(圖三)
步驟三:把(圖二)中的zone2改成你對應的服務區區域。因為我是華南伺服器,所以調用了zone2