當前位置:首頁 » 文件管理 » base64上傳七牛

base64上傳七牛

發布時間: 2022-09-10 13:37:45

『壹』 thinkphp配置七牛 domain參數什麼意思

'domain' => '<這里填七牛外鏈默認域名>',

第一步,注冊七牛雲,創建空間,將空間設為私有,需要記下的東西:
accessKey,secrectKey,domain,bucket

第二步配置ThinkPHP
在config.php添加
'UPLOAD_SITEIMG_QINIU' => array (
'maxSize' => 5 * 1024 * 1024,//文件大小
'rootPath' => './',
'saveName' => array ('uniqid', ''),
'driver' => 'Qiniu',
'driverConfig' => array (
'accessKey' => '<這里填七牛AK>',
'secrectKey' => '<這里填七牛SK>',
'domain' => '<這里填七牛外鏈默認域名>',
'bucket' => '<這里填七牛空間名稱>',
)
)
復制代碼
第三步,上傳文件
控制器
$setting=C('UPLOAD_SITEIMG_QINIU');
$Upload = new \Think\Upload($setting);
$info = $Upload->upload($_FILES);
復制代碼
上傳文件後得到的$info是這樣的
array(1) {
["photo"] => array(10) {
["name"] =>
["type"] =>
["size"] =>
["key"] =>
["ext"] =>
["sha1"] =>
["savename"] =>
["savepath"] =>
["url"] =>
}
}
復制代碼
第四步,計算下載憑證
Common目錄function.php添加方法
function Qiniu_Encode($str) // URLSafeBase64Encode
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($str));
}
function Qiniu_Sign($url) {//$info裡面的url
$setting = C ( 'UPLOAD_SITEIMG_QINIU' );
$etime = NOW_TIME + 86400;//下載憑證有效時間
$DownloadUrl = $url . '?e=' . $etime;
$Sign = hash_hmac ( 'sha1', $DownloadUrl, $setting ["driverConfig"] ["secrectKey"], true );
$EncodedSign = Qiniu_Encode ( $Sign );
$Token = $setting ["driverConfig"] ["accessKey"] . ':' . $EncodedSign;
$RealDownloadUrl = $DownloadUrl . '&token=' . $Token;
return $RealDownloadUrl;
}
復制代碼
$RealDownloadUrl為下載對應私有資源的可用URL
注意
我在開發中沒有遇到QiniuStorage.class.php文件$ak和$sk值不對的問題,估計是官方已經修改這個bug。
但是我上傳文件是都是提示上傳地址不對,最後檢查發現七牛現在存儲區域已經支持華東,華北,華南等多個區域,但是官方還是華東的上傳地址,需要手動修改QiniuStorage.class.php文件的配置
public $QINIU_RSF_HOST = '';
public $QINIU_RS_HOST = 'h';
//public $QINIU_UP_HOST = '';//華東
//public $QINIU_UP_HOST = '';//華北
public $QINIU_UP_HOST = '';//華南
public $timeout = '';

『貳』 關於七牛雲存儲自定義URL的問題

近段時間將使用七牛雲存儲來存放用戶上傳的數據,客戶端通過七牛的js-sdk與七牛交互,服務端C#實現了七牛相關的介面。在這過程中多多少少遇到點問題,在這里總結一下。原文: 使用七牛雲存儲的一些經驗總結
599錯誤處理
如果在與七牛的交互中出現http狀態碼為599的錯誤,一句話,不要猶豫,直接聯系七牛技術支持 。七牛的文檔也在很多地方提到這個錯誤,都是指導大家去聯系技術支持的。筆者是在分塊上傳後的 mkfile 調用時出現的,聯系技術支持後,說是調整了一下,讓我重試。後來就好了...
分塊上傳無法從回調中獲得文件的原始名
簡單上傳採用的是multipart/form-data方式上傳,七牛服務端能夠從請求中獲得文件的原始名,並支持使用魔法變數 $(fname) 回調業務伺服器。不過當使用分片上傳的時候情況有所不同。分片上傳需要在最後調用 mkfile ,來將分片拼接起來。但是, mkfile 介面支持普通的請求,並沒有附帶文件名,所以七牛也就無法獲得文件名,此時從 $(fname) 中是取不到文件名的。這個問題我也向七牛技術支持提交了問題,得到的結果是使用自定義變數 mkfile 支持將自定義變數放在url中,回調的時候自定義變數可以傳遞給業務伺服器。
慎用圖片預處理
七牛雲支持很多對文件的預處理,其中最常用的應該就是圖片預處理了,可以對圖片的大小做變換等。七牛推薦使用GET的方式直接指定圖片處理結果的url,像這樣:
http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200

處理後的圖片會自動緩存,用戶不用關心,只要每次訪問都用這個url就行了。然而,筆者在開始的時候,為了保持與其他文件形式統一的處理方法,對圖片使用了預處理(因為視頻什麼的只能預處理),即在token中指定了預處理。此時問題出現了,從後台的日誌看到,圖片的預處理通知回調竟然比正常的上傳成功回調還要快!這就導致預處理結果到來之前,我的業務伺服器的資料庫中還沒有這個圖片,無法保存預處理結果了。所以 推薦還是使用url直接處理,對圖片要慎用預處理
視頻文件無法快進播放
通常用戶在觀看視頻的時候都會根據自己的喜好,快速將視頻定位到指定的時間播放。實現這個功能,需要視頻本身有關鍵幀信息、服務端需要支持關鍵幀播放請求,在 這篇文章 中有詳細討論。
但是筆者發現,在使用七牛雲轉化後的視頻,這樣做是無效的。於是咨詢技術支持,得到的答案是:轉化的文件是具有關鍵幀的,但七牛使用CDN加速,所以關鍵幀請求需要CDN的支持,如果想要用這個功能的話,需要單獨聯系銷售或技術支持在CDN上配置,而且時間比較長。筆者聯系了銷售和技術支持,說是幫我配置,但到現在還沒有搞定,因為最近這個也不是特別重要,所以也沒有跟下去。
Callback校驗
這是可選的一個步驟。由於七牛雲會在上傳完成之後回調業務伺服器,所以理論上說業務伺服器需要校驗這個回調的合理性。原理在七牛的 文檔 中有,需要用到 HMAC-SHA1 簽名函數。但是七牛的sdk中沒有提供直接的方式來做校驗,在研讀文檔、多次失敗和查看sdk源碼後,筆者終於校驗成功了。關鍵的分歧在於,文檔中的這句話:

獲取明文:data = Request.URL.Path +」\n」 +Request.Body

這里的 Request.URL.Path 是否包含Querystring?答案是包含的!下面是筆者C#服務端的校驗代碼,使用的是ASP.NET Web Api:
```C#
byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY);
using (HMACSHA1 hmac = new HMACSHA1(key))
{
var t = filterContext.Request.Content.ReadAsStringAsync();
t.Wait();
string rawbody = t.Result;
log.DebugFormat("request's rawbody : {0}", rawbody);
string text = filterContext.Request.RequestUri.PathAndQuery + "\n" + rawbody;
log.DebugFormat("PathAndQuery + \n + rawbody : {0}", text);
byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text));
string computed = Qiniu.Util.Base64URLSafe.Encode(digest);
log.DebugFormat("Computed hash after base64 : {0}", computed);
IEnumerable<string> auths;
if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1)
{
string auth = auths.First();
log.DebugFormat("Authorization in header : {0}", auth);
if (auth.StartsWith("QBox "))
{
var arr = auth.Substring(5).Split(':');
if (arr.Length == 2)
{
if (arr[1] != computed)
{
log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed);
}
else
{
log.Debug("Authorization success.");
//only pass can be return
return;
}
}
else
{
log.Error("Callback Authorization's format is invalid, can not find two part after split by ':'.");
}
}
else
{
log.Error("Callback Authorization's format is invalid, missing leading 'QBox '.");
}
}
else
{
log.Error("The request from qiniu callback is missing 'Authorization'");
}

filterContext.Response = filterContext.Request.CreateResponse(System.Net.HttpStatusCode.Forbidden);

}

如下幾個注意點:

- 明文應當是請求的path+querystring部分和rawbody
- 對於.NET而言,明文和key都需要用UTF-8編碼變換成位元組才能進行簽名。而php中的hash_hmac函數完全不用這么復雜...
- 簽名的結果再用base64的url安全的方式編碼,再與請求的http頭部的Authorization比較

建議官方在文檔中加入一些相對底層一些的編程語言的實現,php太高端了...

## js-sdk實現略顯粗糙 ##

在使用過程中,我發現[官方的js-sdk](https://github.com/qiniupd/qiniu-js-sdk/)有幾個我覺得不好的地方:

**不能為每個文件獲取UpToken**

試想,在文件上傳過程中有獲取UpToken是必須的,而且UpToken又需要包含預處理指令,不同的文件顯然需要不同的UpToken,而在js-sdk的實現中,只在初始化這個上傳組件對象的時候請求一次上傳憑證,後面所有的上傳都需要使用這個預先得到的UpToken:

```javascript
uploader.bind('Init', function(up, params) {
getUpToken();
});

於是我修改了這部分,在 BeforeUpload 事件中請求UpToken。建議官方考慮更改這個地方
只能實現分片上傳,無法斷點續傳
js-sdk的實現在分片上傳的實現上,是很簡單的,不僅沒有使用分片,而是分塊(一塊4m,調用mkblk),而且沒有實現持久化ctx,或者類似的回調或介面。4m分塊這個問題還可以不追究,沒有實現持久化ctx就說不過去了,不持久化怎麼實現斷點續傳撒?!就算不實現,也應該給出回調的入口,讓調用者來實現持久化,而我實在無法找到這個'空子'可鑽,只能直接在源碼上改動了。
沒有復用流行類庫的東西
這個其實算不上問題,因為作為一個不依賴jquery的sdk,當然不能使用jquery現成的東西,比如ajax。不依賴jquery就算了,依賴plupload是幾個意思嘛,還依賴全局對象...於是最後,我乾脆自己將sdk改成了Backbone的類,將不要的東西統統去掉,使用jquery和underscore簡化代碼了...

『叄』 android客戶端怎樣用七牛上傳照片

相信很多開發者會把圖片存放到七牛上,我的web站點也是吧圖片存儲到七牛上,對於以圖片為主的站點,這樣可以節省很大帶寬。
將圖片上傳到七牛伺服器的重點就是獲得上傳憑證uploadToken,直接把AccessKey和Secret放到客戶端太不安全,容易被反編譯。所以需要在伺服器端根據AccessKey和Secret動態生成一個uploadToken,然後傳回到客戶端,客戶端通過這個uploadToken將圖片上傳到七牛伺服器。
第一、在伺服器端生成uploadToken

//將圖片上傳到七牛 start
$bucket='七牛空間名稱';
$expires = 3600;
$accessKey='去七牛查看';
$secretKey='去七牛查看';
$client = new QiniuClient($accessKey,$secretKey);
$flags = array();
$scope = $bucket;
$deadline = time() + $expires;
$flags['scope'] = $scope;
$flags['deadline'] = $deadline;
$flags['returnBody'] = null;
echo $client->uploadToken($flags);

這里注意一下bucket:七牛空間名稱和deadline:uploadToken失效時間,具體可查看一下官網上傳憑證介紹
uploadToken($flags)是自己封裝的用於生成上傳憑證的函數

public function uploadToken($flags) { if(!isset($flags['deadline'])) $flags['deadline'] = 3600 + time(); $encodedFlags = self::urlsafe_base64_encode(json_encode($flags)); $sign = hash_hmac('sha1', $encodedFlags, $this->secretKey, true); $encodedSign = self::urlsafe_base64_encode($sign); $token = $this->accessKey.':'.$encodedSign. ':' . $encodedFlags; return $token; }
public static function urlsafe_base64_encode($str){
$find = array("+","/");
$replace = array("-", "_");
return str_replace($find, $replace, base64_encode($str));
}

第二、下載qiniu-android-sdk-7.0.0.jar和android-async-http-1.4.6並導入項目
第三、android上傳圖片
由於Android4.0 以後不允許在主線程進行網路連接,所以需要新開個線程來獲取上傳憑證。

/*
* 上傳圖片到七牛
*/
private void uploadImg(){
new Thread(new Runnable(){
@Override
public void run() {
//獲得七牛上傳憑證uploadToken
String token=getUploadToken();
//手機SD卡圖片存放路徑
String imgPath="";
try {
imgPath=FileUtil.getBasePath()+ "/test.jpg";
} catch (IOException e) {
e.printStackTrace();
}
if(token!=null){
String data = imgPath;
//圖片名稱為當前日期+隨機數生成
String key = getRandomFileName();
UploadManager uploadManager = new UploadManager();
uploadManager.put(data, key, token,
new UpCompletionHandler() {
@Override
public void complete(String arg0, ResponseInfo info, JSONObject response) {
// TODO Auto-generated method stub
Log.i("qiniu", info.toString());
}
}, null);
}
else{
Log.i("fail", "上傳失敗");
}
}
}).start();
}

FileUtil.getBasePath()使用來獲取SD卡基本路徑,getRandomFileName()生成一個隨機數來命名上傳圖片,具體方法我在這就不寫了。

獲得上傳憑證的方法也很簡單,直接使用httpget和伺服器通信,獲得第一步中生成的數據即可。(注意10.0.2.2是模擬器提供的特殊IP,等同於在電腦端的環回測試IP127.0.0.1)

/*
* 獲得七牛上傳憑證uploadtoken
*/

private String getUploadToken()
{
HttpClient client = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();

HttpGet myget = new HttpGet("http://10.0.0.2/test/getUploadToken.php");
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
return builder.toString();
} catch (Exception e) {
Log.i("url response", "false");
e.printStackTrace();
return null;
}
}

通過LOG日誌可以看到Qiniu--success,說明上傳成功。

『肆』 誰用七牛雲設置水印成功了

相信很多開發者會把圖片存放到七牛上,我的web站點也是吧圖片存儲到七牛上,對於以圖片為主的站點,這樣可以節省很大帶寬。將圖片上傳到七牛伺服器的重點就是獲得上傳憑證uploadToken,直接把AccessKey和Secret放到客戶端太不安全,容易被反編譯。所以需要在伺服器端根據AccessKey和Secret動態生成一個uploadToken,然後傳回到客戶端,客戶端通過這個uploadToken將圖片上傳到七牛伺服器。第一、在伺服器端生成uploadToken//將圖片上傳到七牛start$bucket='七牛空間名稱';$expires=3600;$accessKey='去七牛查看';$secretKey='去七牛查看';$client=newQiniuClient($accessKey,$secretKey);$flags=array();$scope=$bucket;$deadline=time()+$expires;$flags['scope']=$scope;$flags['deadline']=$deadline;$flags['returnBody']=null;echo$client->uploadToken($flags);這里注意一下bucket:七牛空間名稱和deadline:uploadToken失效時間,具體可查看一下官網上傳憑證介紹uploadToken($flags)是自己封裝的用於生成上傳憑證的函數publicfunctionuploadToken($flags){if(!isset($flags['deadline']))$flags['deadline']=3600+time();$encodedFlags=self::urlsafe_base64_encode(json_encode($flags));$sign=hash_hmac('sha1',$encodedFlags,$this->secretKey,true);$encodedSign=self::urlsafe_base64_encode($sign);$token=$this->accessKey.':'.$encodedSign.':'.$encodedFlags;return$token;}publicstaticfunctionurlsafe_base64_encode($str){$find=array("+","/");$replace=array("-","_");returnstr_replace($find,$replace,base64_encode($str));}第二、下載qiniu-android-sdk-7.0.0.jar和android-async-http-1.4.6並導入項目第三、android上傳圖片由於Android4.0以後不允許在主線程進行網路連接,所以需要新開個線程來獲取上傳憑證。/**上傳圖片到七牛*/privatevoiploadImg(){newThread(newRunnable(){@Overridepublicvoidrun(){//獲得七牛上傳憑證uploadTokenStringtoken=getUploadToken();//手機SD卡圖片存放路徑StringimgPath="";try{imgPath=FileUtil.getBasePath()+"/test.jpg";}catch(IOExceptione){e.printStackTrace();}if(token!=null){Stringdata=imgPath;//圖片名稱為當前日期+隨機數生成Stringkey=getRandomFileName();UploadManageruploadManager=newUploadManager();uploadManager.put(data,key,token,newUpCompletionHandler(){@Overridepublicvoidcomplete(Stringarg0,ResponseInfoinfo,JSONObjectresponse){//TODOAuto-generatedmethodstubLog.i("qiniu",info.toString());}},null);}else{Log.i("fail","上傳失敗");}}}).start();}FileUtil.getBasePath()使用來獲取SD卡基本路徑,getRandomFileName()生成一個隨機數來命名上傳圖片,具體方法我在這就不寫了。獲得上傳憑證的方法也很簡單,直接使用httpget和伺服器通信,獲得第一步中生成的數據即可。(注意10.0.2.2是模擬器提供的特殊IP,等同於在電腦端的環回測試IP127.0.0.1)/**獲得七牛上傳憑證uploadtoken*/privateStringgetUploadToken(){HttpClientclient=newDefaultHttpClient();StringBuilderbuilder=newStringBuilder();HttpGetmyget=newHttpGet("10.0.0.2/test/getUploadToken.php");try{HttpResponseresponse=client.execute(myget);BufferedReaderreader=newBufferedReader(newInputStreamReader(response.getEntity().getContent()));for(Strings=reader.readLine();s!=null;s=reader.readLine()){builder.append(s);}returnbuilder.toString();}catch(Exceptione){Log.i("urlresponse","false");e.printStackTrace();returnnull;}}通過LOG日誌可以看到Qiniu--success,說明上傳成功。

『伍』 # 自己擁有一台伺服器可以做哪些很酷的事情

買了雲伺服器後,打算來折騰一下伺服器。伺服器都有哪些用途?

建網站、博客。就是這篇文章所說的內容。為甚麼要自己建立博客?因為博客在自己手上總是比較踏實。像社交網站興衰交替,以前寫的心得體會在舊的社交網站上都找不到了,而且自己博客限制也沒那麼大。
具體建站過程可以看我寫的文章 阿里雲伺服器快速建網站_安裝BT寶塔面板和wordpress

雲伺服器(Elastic Compute Service,簡稱ECS)根據其官網介紹是阿里雲提供的性能卓越、穩定可靠、彈性擴展的IaaS(Infrastructure as a Service)級別雲計算服務。

ECS即類似於國外的VPS。(不要好奇那麼多人買國外VPS幹嘛用)。架設個人博客網站、企業門戶都可以使用ECS。如果其網站如個人博客主要面向國內用戶訪問,為加快速度還是建議選用國內的伺服器商。

[阿里雲域名] ( https://wanwang.aliyun.com/domain/com/?userCode=yos4xyvp )連接,

[阿里雲伺服器ECS] ( https://www.aliyun.com/minisite/goods?userCode=yos4xyvp ) 鏈接

以下操作建議電腦端進行。

點擊[阿里雲官網鏈接] ( https://www.aliyun.com/?userCode=yos4xyvp ),點擊免費注冊鏈接。跳出頁面選擇賬號密碼注冊,輸入手機號,注冊阿里雲賬號。注冊之後,需要進行郵箱安全認證。

重新登錄,管理檯布局模式選擇「個人開發者」,進入管理台界面。

在搜索欄搜索域名,進入「域名控制台」。點擊下面 「域名注冊」鏈接 。進入阿里雲萬網頁面。

搜索欄直接搜索想要注冊的域名,如 jiudangwoshicedan.com,選擇「加入清單」。下面還有不同的套餐,看個人需要。點擊右邊清單結算按鈕,跳出「確認訂單」頁面。

「確認訂單」頁面需要「創建信息模板」。

點擊「創建信息模板」鏈接進入該頁面,輸入郵箱、手機、地址等。確認之後,還需郵箱驗證。

驗證完畢之後,重新刷新一下「確認訂單」頁面,選擇域名持有者為「個人」。

「優惠口令」:通過關注阿里雲域名微信公眾號,在公眾號中回復「優惠口令」獲取。

全部勾選,點擊提交。付款之後域名注冊完成。

在此吐槽一下用手機阿里雲app注冊域名各種bug:

最開始是常使用手機app進行域名注冊的。折騰了大半個小時沒搞定。

為方便操作,不建議使用阿里雲手機app作為新手注冊,除非已經進行了郵箱認證和身份證實名認證。在手機app中頂部搜索欄搜索域名,第一個跳出域名注冊鏈接。

注意,域名備案需准備伺服器(有IP那種) ,所以得先購買雲伺服器ECS。點擊[阿里雲伺服器ECS] ( https://www.aliyun.com/proct/ecs?spm=5176.13735996.muuje2t9u.1.53a13b5aPAV4Xh&aly_as=sqns2HDgL&userCode=yos4xyvp )鏈接,進入ECS頁面,點擊「立即購買」按鈕,進入ECS購買頁面。

在ECS購買頁面,如果新手或者嫌麻煩可以選擇「一鍵購買」標簽。

最後點擊「確認訂單」進行購買。

跳出「確認訂單」頁面,勾選「服務協議」,點擊「確認下單」。進行支付。

支付完成即OK,ECS購買完成。

域名備案需要有域名、伺服器。其流程如下所示。

點擊 網站備案 鏈接,點擊頁面右邊「開始備案」按鈕,跳出「開始備案」頁面。

填入「主辦單位所屬區域」,「主辦單位性質」選擇「個人」,填入身份證號碼和域名。點擊最後「驗證備案類型」。進入「產品驗證」頁面。

「產品類型」選擇ECS,「選擇實例」里會自動選擇自己購買的雲伺服器「實例名稱」。最後點擊「驗證」按鈕。

後面就是提交身份證正反面、人臉識別。後面就等著阿里雲客服初審,初審會電話聯系進行提交資料的修改等幫助。修改完畢之後就提交備案審核機構。等待十來天不等就通過備案審查,會收到域名備案信息簡訊和郵件提醒。

點擊 阿里雲終端控制台鏈接 登錄

點擊實例ID里的鏈接

點擊「遠程連接」旁邊「更多」下拉箭頭的」重置實例密碼「。

跳出」重置密碼「頁面,輸入新的密碼,這個是網頁和遠程SSH登錄ECS的密碼。

最終顯示登錄成功界面。

另外,如果覺得網頁不習慣的話,也可以SSH遠程登錄。

圖床,可以參考我此前寫的文章 七牛圖床添加阿里雲域名 、 阿里雲域名注冊與備案、伺服器ECS購買與登錄 、 markdown多平台發布及七牛圖床使用

因為使用Markdown作為日常文章記錄,markdown挺方便的,就是對圖片引用不太方便,一直使用本地圖片引用。

當要將一些文章發布到知乎、個人博客、還有微信公眾號的時候,圖片就缺失了,需要手動重新上傳。當圖片比較多,發布平台也比較多時候,就覺得本地圖片引用不合適。

針對這個問題,解決方法就是使用圖床,在文章里引用是圖床連接。

針對無網路情形下,則用本地圖片替換,typora這個編輯器提供這個選項。

根據對網上的搜索和本人使用對比,推薦使用七牛作為圖床,並配合Mpic圖床神器使用方便粘貼圖床連接。

1.通過網上搜索,有建議通過base64進行轉換的,轉換成一大坨base64文本插入,markdown編輯器都有些卡死了。這個base64方式就直接pass了。

2.還有推薦github作為圖床的,一是這個由於眾所周知的原因需要加速器,否則比較慢;二是上傳之後,直接復制github里repository圖片鏈接並不能直接顯示,需要點擊download,生成raw.githubusercontent.com/XX的連接,需要等一段時間,這段時間可長可短,反正我等了10分鍾還沒生成;三是沒有圖片上傳神器,需要手動復制鏈接。這個也太麻煩了。如下圖就是用github作為圖床的,不知道大家刷出來了么?

七牛官方注冊為 https://portal.qiniu.com/signup?code=1h51ixa3vs4lu ,通過個人認證後提供10G存儲空間,足夠博客等使用了。

這個注冊過程過程如下

1.填入郵箱和手機號,注冊後需要驗證郵箱,同時通過個人認證

圖床神器是配合桌面使用,方便將圖片上傳至七牛雲空間,並且自動生成鏈接插入markdown文件中。

填入的域名在這里找到

推薦使用微信公眾號格式化工具,網址是 http://blog.didispace.com/tools/online-markdown/

通過在網頁左邊粘貼markdown語言,右邊即可生成公眾號適用的素材,通過復制按鈕即可粘貼至公眾號發布頁。

通過粘貼markdown直接生成

推薦選用Typora作為markdown編輯器。

作者的其他回答:

阿里雲域名注冊與備案、伺服器ECS購買與登錄 、

七牛圖床添加阿里雲域名 、

『陸』 七牛圖片基本處理和水印能同時用嗎

相信很多開發者會把圖片存放到七牛上,我的web站點也是吧圖片存儲到七牛上,對於以圖片為主的站點,這樣可以節省很大帶寬。 將圖片上傳到七牛伺服器的重點就是獲得上傳憑證uploadToken,直接把AccessKey和Secret放到客戶端太不安全,容易被反編譯。所以需要在伺服器端根據AccessKey和Secret動態生成一個uploadToken,然後傳回到客戶端,客戶端通過這個uploadToken將圖片上傳到七牛伺服器。 第一、在伺服器端生成uploadToken //將圖片上傳到七牛 start $bucket='七牛空間名稱'; $expires = 3600; $accessKey='去七牛查看'; $secretKey='去七牛查看'; $client = new QiniuClient($accessKey,$secretKey); $flags = array(); $scope = $bucket; $deadline = time() + $expires; $flags['scope'] = $scope; $flags['deadline'] = $deadline; $flags['returnBody'] = null; echo $client->uploadToken($flags); 這里注意一下bucket:七牛空間名稱和deadline:uploadToken失效時間,具體可查看一下官網上傳憑證介紹 uploadToken($flags)是自己封裝的用於生成上傳憑證的函數 public function uploadToken($flags) { if(!isset($flags['deadline'])) $flags['deadline'] = 3600 + time(); $encodedFlags = self::urlsafe_base64_encode(json_encode($flags)); $sign = hash_hmac('sha1', $encodedFlags, $this->secretKey, true); $encodedSign = self::urlsafe_base64_encode($sign); $token = $this->accessKey.':'.$encodedSign. ':' . $encodedFlags; return $token; } public static function urlsafe_base64_encode($str){ $find = array("+","/"); $replace = array("-", "_"); return str_replace($find, $replace, base64_encode($str)); } 第二、下載qiniu-android-sdk-7.0.0.jar和android-async-http-1.4.6並導入項目 第三、android上傳圖片 由於Android4.0 以後不允許在主線程進行網路連接,所以需要新開個線程來獲取上傳憑證。 /* * 上傳圖片到七牛 */ private void uploadImg(){ new Thread(new Runnable(){ @Override public void run() { //獲得七牛上傳憑證uploadToken String token=getUploadToken(); //手機SD卡圖片存放路徑 String imgPath=""; try { imgPath=FileUtil.getBasePath()+ "/test.jpg"; } catch (IOException e) { e.printStackTrace(); } if(token!=null){ String data = imgPath; //圖片名稱為當前日期+隨機數生成 String key = getRandomFileName(); UploadManager uploadManager = new UploadManager(); uploadManager.put(data, key, token, new UpCompletionHandler() { @Override public void complete(String arg0, ResponseInfo info, JSONObject response) { // TODO Auto-generated method stub Log.i("qiniu", info.toString()); } }, null); } else{ Log.i("fail", "上傳失敗"); } } }).start(); } FileUtil.getBasePath()使用來獲取SD卡基本路徑,getRandomFileName()生成一個隨機數來命名上傳圖片,具體方法我在這就不寫了。 獲得上傳憑證的方法也很簡單,直接使用httpget和伺服器通信,獲得第一步中生成的數據即可。(注意10.0.2.2是模擬器提供的特殊IP,等同於在電腦端的環回測試IP127.0.0.1) /* * 獲得七牛上傳憑證uploadtoken */ private String getUploadToken() { HttpClient client = new DefaultHttpClient(); StringBuilder builder = new StringBuilder(); HttpGet myget = new HttpGet("10.0.0.2/test/getUploadToken.php"); try { HttpResponse response = client.execute(myget); BufferedReader reader = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); for (String s = reader.readLine(); s != null; s = reader.readLine()) { builder.append(s); } return builder.toString(); } catch (Exception e) { Log.i("url response", "false"); e.printStackTrace(); return null; } } 通過LOG日誌可以看到Qiniu--success,說明上傳成功。

『柒』 如何基於七牛雲存儲+Markdown編輯器做靜態博客

首先,在七牛上創建一個 bucket,我們假設名字叫 qiniu。上傳一個樣式單文件 stylesheet.css。假設關聯的域名叫 open.qiniudn.com,那麼這個樣式單可以通過 http://open.qiniudn.com/stylesheet.css 訪問到。
其次,為 qiniu 這個空間設置樣式分隔符為 '.'。這可以通過 qboxrsctl separator qiniu '.' 來完成。
最後,為 qiniu 這個空間設置一個名為 html 的數據處理樣式。命令為:
qboxrsctl style qiniu html '$0.md?md2html/0/css/='

其中,= 是對 http://open.qiniudn.com/stylesheet.css 進行 UrlsafeBase64Encode 後的結果。
如此,你上傳任何一個 markdown 文件(比如 http://open.qiniudn.com/key-value-storage.md ),都可以通過對應的 html 後綴文件訪問(比如 http://open.qiniudn.com/key-value-storage.html )。
如果你不希望讓別人可以看到 markdown 文件的原始內容,可以將 bucket 設置為保護:
qboxrsctl protected qiniu 1

『捌』 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>

『玖』 如何部署 Octopress 到七牛雲存儲

首先,在七牛上創建一個 bucket,我們假設名字叫 qiniu。上傳一個樣式單文件 stylesheet.css。假設關聯的域名叫 open.qiniudn.com,那麼這個樣式單可以通過 http://open.qiniudn.com/stylesheet.css 訪問到。
其次,為 qiniu 這個空間設置樣式分隔符為 '.'。這可以通過 qboxrsctl separator qiniu '.' 來完成。
最後,為 qiniu 這個空間設置一個名為 html 的數據處理樣式。命令為:
qboxrsctl style qiniu html '$0.md?md2html/0/css/='

其中,= 是對 http://open.qiniudn.com/stylesheet.css 進行 UrlsafeBase64Encode 後的結果。
如此,你上傳任何一個 markdown 文件(比如 http://open.qiniudn.com/key-value-storage.md ),都可以通過對應的 html 後綴文件訪問(比如 http://open.qiniudn.com/key-value-storage.html )。

『拾』 app base64上傳好不好

首先提問並沒說清楚具體採用啥Lib,或者啥協議,上傳。其次,後端是用啥開發也不清楚。
我現在做一下常見的場景假設。
1、這個App是基於Http協議實現的上傳功能,具體用啥庫到不用糾結
2、後端採用Php,JSP,NodeJS等常見的後端開發語言

先說結論:反對使用BASE64編碼文件後在上傳
原因如下:
1、使用BASE64編碼後,會導致數據量增加33%,對於手機App來講,這是不可容忍的。
2、額外的編碼工作帶來的CPU開銷,電量開銷。(雖然開銷很小,蚊子肉也是肉啊親)
3、現有後端框架,基本上都能輕松處理上傳任務。

熱點內容
我的世界手機國際怎麼創建伺服器 發布:2024-10-11 13:45:46 瀏覽:419
svnlinux命令 發布:2024-10-11 13:35:54 瀏覽:233
ig加密語音 發布:2024-10-11 12:19:25 瀏覽:486
釘圖上傳 發布:2024-10-11 12:11:27 瀏覽:477
腳本個 發布:2024-10-11 12:10:43 瀏覽:150
剛性攻絲的編程 發布:2024-10-11 12:10:39 瀏覽:467
怎麼登錄安卓版全民tv 發布:2024-10-11 12:10:33 瀏覽:622
伺服器接收的參數名是什麼 發布:2024-10-11 12:05:38 瀏覽:641
c語言中的goto 發布:2024-10-11 11:57:14 瀏覽:394
小司馬編程 發布:2024-10-11 11:45:03 瀏覽:83