小程序服务器七牛云,基于七牛云 API 开发的微信小程序 SDK
概述
Qiniu-wxapp-SDK 是七牛云在小程序上的實(shí)現(xiàn),網(wǎng)絡(luò)功能依賴于微信小程序 API。您可以基于 SDK 方便的在小程序中上傳文件至七牛云。
Qiniu-wxapp-SDK? 為客戶端 SDK,沒(méi)有包含 token 生成實(shí)現(xiàn),為了安全,token 建議通過(guò)網(wǎng)絡(luò)從服務(wù)端獲取,具體生成代碼可以參考以下服務(wù)端 SDK 的文檔。SDK Demo中暫時(shí)沒(méi)有包含這部分。
Java
PHP
Python
Ruby
Go
Node.js
C#
C/C++
功能簡(jiǎn)介
上傳
其他功能在開發(fā)中,敬請(qǐng)期待。準(zhǔn)備
從 github 上下載qiniuUploader.js,導(dǎo)入小程序工程。
在使用 SDK 之前,您必須先注冊(cè)一個(gè)七牛云帳號(hào),并登錄控制臺(tái)獲取一對(duì)有效的 AccessKey 和 SecretKey,您可以閱讀如何接入七牛?和?安全機(jī)制?以進(jìn)一步了解如何正確使用和管理密鑰 。
SDK 依賴服務(wù)端頒發(fā) uptoken,可以通過(guò)以下二種方式實(shí)現(xiàn):
利用七牛服務(wù)端 SDK?構(gòu)建后端服務(wù)(建議的方式)
利用七牛底層 API 構(gòu)建服務(wù),詳見七牛上傳策略和上傳憑證
您需要了解您的七牛存儲(chǔ)空間設(shè)置在那個(gè)區(qū)域,比如華東,華南等,參見區(qū)域設(shè)置
后端服務(wù)應(yīng)提供一個(gè) URL 地址,供小程序請(qǐng)求該地址后獲得 uptoken。請(qǐng)求成功后,服務(wù)端應(yīng)返回如下格式的 json(至少包含 uptoken 字段):
{
"uptoken": "0MLvWPnyya1WtPnXFy9KLyGHyFPNdZceomL..."
}
根據(jù)你創(chuàng)建的七牛存儲(chǔ)空間,把對(duì)應(yīng)的 https 上傳地址添加到小程序的訪問(wèn)白名單中,方法如下:
登錄?微信公眾平臺(tái),前往?設(shè)置 - 開發(fā)設(shè)置,點(diǎn)擊?服務(wù)器配置?下的「修改」鏈接。
修改 uploadFile 域名(比如華北 https 上傳地址為:https://up-z1.qbox.com,地址不清楚請(qǐng)參見https地址附錄)
如果需要下載文件,則還需要一同設(shè)置?downloadFile 域名,為你的 bucket 下載地址
保存即可
字段名
內(nèi)容
request 域名
https://yourServce.com
uploadFile 域名
https://up.qbox.me?(根據(jù)存儲(chǔ)區(qū)域填寫)
downloadFile 域名
https://baldkf.bkt.clouddn.com
存儲(chǔ)區(qū)域?qū)?yīng) HTTPS 地址,參考官方文檔
存儲(chǔ)區(qū)域
區(qū)域代碼
HTTPS 地址
華東
ECN
https://up.qbox.me
華北
NCN
https://up-z1.qbox.me
華南
SCN
https://up-z2.qbox.me
北美
NA
https://up-na0.qbox.me
注意!!目前微信限制每月只能修改三次域名白名單。
安裝
暫時(shí)支持一種安裝方式
通過(guò) Github 上的 gpake/qiniu-wxapp-sdk 倉(cāng)庫(kù)獲取
直接克隆倉(cāng)庫(kù)
git clone https://github.com/gpake/qiniu-wxapp-sdk.git
qiniuUploader.js 文件在 sdk 目錄。使用
上傳功能
在需要使用的頁(yè)面引用js 文件:
const qiniuUploader = require("../../../utils/qiniuUploader");
在需要使用上傳功能的頁(yè)面,開心的使用:
Page({
didPressChooseImage: function() {
var that = this;
// 選擇圖片
wx.chooseImage({
count: 1,
success: function (res) {
var filePath = res.tempFilePaths[0];
// 交給七牛上傳
qiniuUploader.upload(filePath, (res) => {
// 每個(gè)文件上傳成功后,處理相關(guān)的事情
// 其中 info 是文件上傳成功后,服務(wù)端返回的json,形式如
// {
//? ? "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
//? ? "key": "gogopher.jpg"
//? }
// 參考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html
that.setData({
'imageURL': res.imageURL,
});
}, (error) => {
console.log('error: ' + error);
}, {
uploadURL: 'https://up.qbox.me',
domain: 'bzkdlkaf.bkt.clouddn.com', // // bucket 域名,下載資源時(shí)用到。如果設(shè)置,會(huì)在 success callback 的 res 參數(shù)加上可以直接使用的 ImageURL 字段。否則需要自己拼接
key: 'customFileName.jpg', // 自定義文件 key。如果不設(shè)置,默認(rèn)為使用微信小程序 API 的臨時(shí)文件名
// 以下方法三選一即可,優(yōu)先級(jí)為:uptoken > uptokenURL > uptokenFunc
uptoken: 'xxxxxxxxUpToken', // 由其他程序生成七牛 uptoken
uptokenURL: 'UpTokenURL.com/uptoken', // 從指定 url 通過(guò) HTTP GET 獲取 uptoken,返回的格式必須是 json 且包含 uptoken 字段,例如: {"uptoken": "0MLvWPnyy..."}
uptokenFunc: function() {return 'zxxxzaqdf';}
});
}
})
}
});
// domain 為七??臻g(bucket)對(duì)應(yīng)的域名,選擇某個(gè)空間后,可通過(guò)"空間設(shè)置->基本設(shè)置->域名設(shè)置"查看獲取
// key:通過(guò)微信小程序 Api 獲得的圖片文件的 URL 已經(jīng)是處理過(guò)的臨時(shí)地址,可以作為唯一文件 key 來(lái)使用。
DEMO
請(qǐng)使用微信web開發(fā)者工具打開 demo 文件夾,然后配置 index.js 中的相關(guān)參數(shù)以使用 demo。
API
var options = {
region: 'East', // 是你注冊(cè)bucket的時(shí)候選擇的區(qū)域的代碼
// ECN, SCN, NCN, NA,分別對(duì)應(yīng)七牛的:華東,華南,華北,北美四個(gè)區(qū)域
// 詳情可以參見「說(shuō)明」部分的第一條
domain: 'bzkdlkaf.bkt.clouddn.com', // // bucket 域名,下載資源時(shí)用到。如果設(shè)置,會(huì)在 success callback 的 res 參數(shù)加上可以直接使用的 ImageURL 字段。否則需要自己拼接
// 以下方法三選一即可,優(yōu)先級(jí)為:uptoken > uptokenURL > uptokenFunc
uptoken: 'xxxxxxxxUpToken', // 由其他程序生成七牛 uptoken
uptokenURL: 'UpTokenURL.com/uptoken', // 從指定 url 通過(guò) HTTP GET 獲取 uptoken,返回的格式必須是 json 且包含 uptoken 字段,例如: {"uptoken": "0MLvWPnyy..."}
uptokenFunc: function() {
// do something to make a uptoken
return 'zxxxzaqdfUpToken';
}
};
qiniuUploder.init(options);
// 如果使用了 init 方法,則 upload 函數(shù)的 options 可以省略。如果沒(méi)有 init,upload 中也沒(méi)有 options 則會(huì)報(bào)錯(cuò)。
// 這里的 options 和 init 中的傳入?yún)?shù)一樣,只會(huì)修改傳入的參數(shù)
// 上傳之前會(huì)檢查 uptoken 是否存在
qiniuUploader.upload(wxappFilePath, [succeedCallback, [failedCallback, [options]]]);
// 其中 wxappFilePath,是通過(guò)微信小程序官方 API:wx.chooseImage,在 success callback得到 var filePath = res.tempFilePaths[0];
說(shuō)明
對(duì)于存儲(chǔ)空間的存儲(chǔ)區(qū)域,創(chuàng)建存儲(chǔ)空間的時(shí)候可以選擇。
當(dāng)前一共有四個(gè)區(qū)域可以選擇:[華東,華北,華南,北美],對(duì)應(yīng)著不同的服務(wù)器地址
如果你不知道在哪里看當(dāng)前空間的存儲(chǔ)區(qū)域,可以登錄七牛后臺(tái),在這個(gè)頁(yè)面的右下角查看
對(duì)于存儲(chǔ)區(qū)域和 options 中 region 代碼可以參考這個(gè)表格
SDK 依賴 uptoken,可以直接設(shè)置?uptoken? 、通過(guò)提供 Ajax 請(qǐng)求地址?uptokenURL?或者通過(guò)提供一個(gè)能夠返回 uptoken 的函數(shù)?uptoken_func?實(shí)現(xiàn)。
如果沒(méi)用設(shè)置過(guò)uptoken, uptoken_url 兩個(gè)參數(shù)中必須有一個(gè)被設(shè)置
如果提供了多個(gè),其優(yōu)先級(jí)為 uptoken > uptoken_url
其中 uptoken 是直接提供上傳憑證,uptoken_url 是提供了獲取上傳憑證的地址
uptoken : '', // uptoken 是上傳憑證,由其他程序生成
uptoken_url: '/uptoken', ? ? ? ? // Ajax 請(qǐng)求 uptoken 的 Url,強(qiáng)烈建議設(shè)置(服務(wù)端提供)
如果您想了解更多七牛的上傳策略,建議您仔細(xì)閱讀?七牛官方文檔-上傳。 七牛的上傳策略是在后端服務(wù)指定的。
如果您想了解更多七牛的圖片處理,建議您仔細(xì)閱讀?七牛官方文檔-圖片處理
SDK 示例生成 uptotken 時(shí),指定的?Bucket Name?為公開空間,所以可以公開訪問(wèn)上傳成功后的資源。若您生成 uptoken 時(shí),指定的?Bucket Name?為私有空間,那您還需要在服務(wù)端進(jìn)行額外的處理才能訪問(wèn)您上傳的資源。具體參見下載憑證。SDK 數(shù)據(jù)處理部分功能不適用于私有空間。
常見問(wèn)題
關(guān)于上傳文件名
如果在上傳的時(shí)候沒(méi)有指定文件 key,會(huì)使用 wx.chooesImage 得到的tmp filePath作為文件的 key。例如:tmp_xxxxxxx.jpg
設(shè)置取消上傳、暫停上傳:
微信小程序上傳 API 暫時(shí)無(wú)法取消、暫停上傳操作
限制上傳文件的類型:
使用微信小程序 API 只能選到圖片文件。
如果是小程序內(nèi)產(chǎn)生的文件,那么正常使用即可。
總結(jié)
以上是生活随笔為你收集整理的小程序服务器七牛云,基于七牛云 API 开发的微信小程序 SDK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Css标题中图片居中,图片居中:任意图片
- 下一篇: ajax如何给label赋值,如何让Aj