原地址:/?p=157
關於奇牛雲存儲的在線教程,除了官網的API文檔,太少了。學習了API,現在可以上傳下載圖片,上傳後重定向。
首先,本文實現的功能如下:
1.通過表單上傳功能,用戶可以點擊選擇文件按鈕,選擇壹個本地文件,同時設置上傳圖片的名稱。點擊上傳按鈕,上傳保存到七牛雲存儲中。
2.點擊上傳時,會檢測到文件的後綴名稱,僅限於jpg和png格式存儲。
3.上傳成功後,跳轉到壹個自己設置的URL,返回文件信息,比如文件名。而不是顯示七頭牛和白花的json顯示頁面。
好了,我們開始吧。首先,我們需要有壹個七牛雲存儲賬戶。如果我們沒有,我們可以自己申請。
七牛雲存儲門戶:/
壹. SDK下載
/qiniu/php-sdk/tags
戳這個網站下載SDK,裏面封裝了上傳下載文件的方法等。介紹完之後我們可以直接調用。
SDK裏有壹個qiniu的文件夾,裏面都是SDK的貨,這是最重要的。我們必須先把這個文件夾和裏面的文件放到項目文件夾裏,比如我把它放在這裏。
妳可以看到,有壹個七牛文件夾。嗯,這就是資源支持。接下來,我們需要實現代碼。
二。上傳文件。
1.首先拿妳雲存儲的密鑰,點擊賬戶設置,看到有壹個AccessKey和壹個SecretKey,是預留使用的。
2.上傳憑證生成。
這裏我們首先需要導入rs.php文件,並自己找到相應的路徑。代碼如下:
require_once(目錄名(__文件_ _)。"/../../qiniu/RS . PHP ");
Dirname()指的是的絕對路徑,有時候相對路徑會有問題。建議在前面加上dirname方法,獲取絕對路徑。
Require_once是壹個導入文件,這意味著該文件只被導入壹次。
然後,傳入您的訪問密鑰和秘密密鑰。
代碼如下:
$accessKey?=?imn 35k C5 prx 7 ov 3 scxbykvnk 6 oix 7 zwsbrp 16 ';?//更改為您自己的密鑰。
$secretKey?=?s 29 VC 9 tlcv 23 wrh 7 qscytuzcdmerokj 1 ddssz ';//替換成自己的key Qiniu _ setkeys ($ access key,$ secret key);
然後構建壹個上傳策略對象,把妳的桶?傳入,bucket是妳的空間名。
$ bucket = ' designpartners
$ put policy = new Qiniu _ RS _ put policy($ bucket);
然後調用此方法來生成上載憑據。
$ upToken = $ put policy-& gt;Token(空);
然後寫壹個html表單。
& lt形式?method="post "?動作= " "?名字?=?“形式”?enctype="multipart/form-data " >
& ltul & gt
& lt輸入?type="hidden "?id="token "?name="token "?value = & lt?php?回聲?$upToken?& gt& gt
& lt李& gt
& lt標簽?for = " key " & gt鍵:& lt/label & gt;
& lt輸入?name="key "?value = " " & gt
& lt/李& gt
& lt李& gt
& lt標簽?for = " bucket " & gt照片:
& lt輸入?name="file "?type="file "?/& gt;
& lt/李& gt
& lt李& gt
& lt輸入?type="submit "?Value= "提交"?& gt
& lt/李& gt
& lt/ul & gt;
& lt/form & gt;行動?就填?Up.qiniu.com,表單提供了壹個輸入框鍵,用來輸入妳想要保存的圖片的名稱。這是上傳到七牛後的名字。
然後是文件選擇,提交按鈕。運行結果如下:
您可以通過輸入鍵值並選擇照片來上傳照片。哈哈哈。簡單嗎?
第三,文件下載
原理類似於文件上傳功能。
導入文件
require_once(目錄名(__文件_ _)。"/../../qiniu/RS . PHP ");聲明妳的奇牛雲存儲域名和兩個密鑰,以及從下載的文件名。
$key?=?'00000';
$domain?=?design partners . qiniudn . com ';
$accessKey?=?io imn 35 c5p 3 scxxbykvnk 6 oixb 7 zwsbrp 16 ';
$secretKey?=?s 29 VC 9 tlcvs 23 wcdmibus 4 erokj 1z ';註意:1.key的值是文件名,不帶後綴。
2 .域是桶加qiniudn.com。在示例中,designpartners是我在上傳圖片時使用的桶名。
3.您不能用自己的密鑰替換3.accessKey和secretKey,但不能直接使用我的...因為我修改了。
qiniu _ SetKeys($access key,?$ secret key);?
$baseUrl?=?qiniu _ RS _ MakeBaseUrl($domain,?$ key);
$getPolicy?=?新的?qiniu _ RS _ get policy();
$privateUrl?=?$ get policy-& gt;MakeRequest($baseUrl,null);
回聲?$privateUrl?。?”\ n”;傳入這四個值生成同壹個url,直接訪問url下載圖片。
介紹圖片時直接
& ltimg src = " & lt?php echo $ privateUrl?>/& gt;
可以導入圖片。很簡單。
四、303重定向
在上面的方法中,當我們成功上傳圖片後,我們跳轉到up.qiniu.com,會顯示壹個白色的網頁和壹個json字符串。但是在實際的網站開發中,我們肯定不能讓用戶看到這種網頁,所以我們使用303跳轉。SDK也為我們封裝了這個方法。其實用起來很簡單。只需在上傳文件的代碼中添加兩行代碼。
$putPolicy?=?新的?qiniu _ RS _ put policy($ bucket);
$ put policy-& gt;ReturnUrl?=?site_url()。"/upload/receive info ";
$ put policy-& gt;ReturnBody='{"key ":?$(key)} ';註:1。ReturnUrl和ReturnBody必須指定,第壹個字母要大寫,而且很多人都是小寫開頭,會導致跳轉不成功。
2.ReturnUrl必須是公網可訪問的網站,不可能通過本地測試。比如妳寫localhost,七牛服務器定位不到。
3.這個ReturnUrl鏈接後面會有壹個嗎?Upload_ret=XXX,可以通過get方法得到這個Upload_ret。upload_ret的內容是base64安全編碼的json鍵值。
數值解析:比如我上傳的文件名是555。
上傳/接收信息?upload _ ret = eyjrzxkioiaintu 1in 0 =
URL後綴如上所示。復制upload_ret,用base64解碼,會出現以下結果:
{"key": "555"}
所以,我們要得到的值555的代碼如下,也就是解析代碼如下:
$upload_ret?=?$ _ GET[' upload _ ret '];
$json_ret?=?base64 _ decode($ upload _ ret);
$ result = JSON _ decode($ JSON _ ret);
回聲?“鑰匙”。$ result-& gt;關鍵;那麽,在妳得到這個鍵值之後,妳可以選擇把它保存在數據庫中或者進行其他操作。
動詞 (verb的縮寫)上傳前驗證文件類型
我們可以使用js來驗證文件後綴,
添加到表單的屬性中
onsubmit = " return is validate file(' file ');"
添加壹個js方法。
& lt腳本& gt
功能?isValidateFile(obj)?{
var?延伸?=?document . form . file . value . substring(document . form . file . value . lastindexof(" . ")?+?1);
如果?(延伸?==?"")?{
Alert("請選擇壹個頭像");
回歸?假的;
}
不然呢?{
如果?(!(延伸?==?“jpg”?||?延伸?==?" png "))?{
Alert("請上傳壹個後綴為jpg或png的文件!");
回歸?假的;
}
}
回歸?真實;
}
& lt/script & gt;可以驗證其類型是否合法。
附:CI代碼實現:
起床肯:
功能?getUptoken(){
require_once(目錄名(__文件_ _)。"/../../qiniu/RS . PHP ");
//遠程存儲空間名稱
$bucket?=?design partners ';
$accessKey?=?io imn 35 crx 7 ov 3 scvnk 6 oixb 7 zwsbrp 16 ';
$secretKey?=?s 29 VC 9 tlcv 23 wrhtuzcdmibus 4 erokj 1z ';
qiniu _ SetKeys($access key,?$ secret key);
$putPolicy?=?新的?qiniu _ RS _ put policy($ bucket);
回聲?site _ URL();
$ put policy-& gt;ReturnUrl?=?site_url()。"/upload/receive info ";
$ put policy-& gt;ReturnBody='{"key ":?$(key)} ';
$upToken?=?$ put policy-& gt;Token(空);
回歸?$ upToken
}文件上傳:
公共?功能?uploadPic(){
$upToken?=?$ this-& gt;getUptoken();
$data['upToken']?=?$ upToken
$ this-& gt;加載->;view('upload ',$ data);
}303重定向分辨率:
公共?功能?接收信息(){
$upload_ret?=?$ _ GET[' upload _ ret '];
$json_ret?=?base64 _ decode($ upload _ ret);
$ result = JSON _ decode($ JSON _ ret);
回聲?“鑰匙”。$ result-& gt;關鍵;?
}文件下載:
公共?功能?downloadPic(){
require_once(目錄名(__文件_ _)。"/../../qiniu/RS . PHP ");
$key?=?'00000';
$domain?=?design partners . qiniudn . com ';
$accessKey?=?io imn 35 KC 57 ov 3 scxbykvnk 6 oixb 7 zwsbrp 16 ';
$secretKey?=?s 29 VC 9 tlcvsh 7 qscytuzcdmibus 4 erokj 1z ';
qiniu _ SetKeys($access key,?$ secret key);?
$baseUrl?=?qiniu _ RS _ MakeBaseUrl($domain,?$ key);
$getPolicy?=?新的?qiniu _ RS _ get policy();
$privateUrl?=?$ get policy-& gt;MakeRequest($baseUrl,null);
回聲?“= = = = = >;?getPolicy?結果:?\ n ";
回聲?$privateUrl?。?”\ n”;
}表格:
& lt腳本& gt
功能?isValidateFile(obj)?{
var?延伸?=?document . form . file . value . substring(document . form . file . value . lastindexof(" . ")?+?1);
如果?(延伸?==?"")?{
Alert("請選擇壹個頭像");
回歸?假的;
}
不然呢?{
如果?(!(延伸?==?“jpg”?||?延伸?==?" png "))?{
Alert("請上傳壹個後綴為jpg或png的文件!");
回歸?假的;
}
}
回歸?真實;
}
& lt/script & gt;
& lt形式?method="post "?動作= " "?名字?=?“形式”?enctype="multipart/form-data "?onsubmit="return?is validate file(' file ');"& gt
& ltul & gt
& lt輸入?type="hidden "?id="token "?name="token "?value = & lt?php?回聲?$upToken?& gt& gt
& lt李& gt
& lt標簽?for = " key " & gt鍵:& lt/label & gt;
& lt輸入?name="key "?value = " " & gt
& lt/李& gt
& lt李& gt
& lt標簽?for = " bucket " & gt照片:
& lt輸入?name="file "?type="file "?/& gt;
& lt/李& gt
& lt李& gt
& lt輸入?type="submit "?Value= "提交"?& gt
& lt/李& gt
& lt/ul & gt;
& lt/form & gt;