當前位置:名人名言大全網 - 端午節短信 - Php表單上傳圖片到七牛雲存儲,返回地址...求具體流程~最好有代碼。

Php表單上傳圖片到七牛雲存儲,返回地址...求具體流程~最好有代碼。

有,最近研究了壹下,寫了個記錄,如下。

原地址:/?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;