123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- var CosAuth = require('./lib/cos-auth');
- var config = require('./config');
- var uploadFile = function () {
- // 请求用到的参数
- // var prefix = 'https://cos.' + config.Region + '.myqcloud.com/' + config.Bucket + '/'; // 这个是后缀式,签名也要指定 Pathname: '/' + config.Bucket + '/'
- var prefix = 'https://' + config.Bucket + '.cos.' + config.Region + '.myqcloud.com/';
- // 对更多字符编码的 url encode 格式
- var camSafeUrlEncode = function (str) {
- return encodeURIComponent(str)
- .replace(/!/g, '%21')
- .replace(/'/g, '%27')
- .replace(/\(/g, '%28')
- .replace(/\)/g, '%29')
- .replace(/\*/g, '%2A');
- };
- // 获取临时密钥
- var stsCache;
- var getCredentials = function (callback) {
- if (stsCache && Date.now() / 1000 + 30 < stsCache.expiredTime) {
- callback(stsCache.credentials);
- return;
- }
- wx.request({
- method: 'GET',
- url: config.stsUrl, // 服务端签名,参考 server 目录下的两个签名例子
- dataType: 'json',
- success: function (result) {
- var data = result.data;
- var credentials = data.credentials;
- if (credentials) {
- stsCache = data
- } else {
- wx.showModal({title: '临时密钥获取失败', content: JSON.stringify(data), showCancel: false});
- }
- callback(stsCache && stsCache.credentials);
- },
- error: function (err) {
- wx.showModal({title: '临时密钥获取失败', content: JSON.stringify(err), showCancel: false});
- }
- });
- };
- // 计算签名
- var getAuthorization = function (options, callback) {
- getCredentials(function (credentials) {
- callback({
- XCosSecurityToken: credentials.sessionToken,
- Authorization: CosAuth({
- SecretId: credentials.tmpSecretId,
- SecretKey: credentials.tmpSecretKey,
- Method: options.Method,
- Pathname: options.Pathname,
- })
- });
- });
- };
- // 上传文件
- var uploadFile = function (filePath) {
- var Key = filePath.substr(filePath.lastIndexOf('/') + 1); // 这里指定上传的文件名
- getAuthorization({Method: 'POST', Pathname: '/'}, function (AuthData) {
- var requestTask = wx.uploadFile({
- url: prefix,
- name: 'file',
- filePath: filePath,
- formData: {
- 'key': Key,
- 'success_action_status': 200,
- 'Signature': AuthData.Authorization,
- 'x-cos-security-token': AuthData.XCosSecurityToken,
- 'Content-Type': '',
- },
- success: function (res) {
- var url = prefix + camSafeUrlEncode(Key).replace(/%2F/g, '/');
- if (res.statusCode === 200) {
- wx.showModal({title: '上传成功', content: url, showCancel: false});
- } else {
- wx.showModal({title: '上传失败', content: JSON.stringify(res), showCancel: false});
- }
- console.log(res.statusCode);
- console.log(url);
- },
- fail: function (res) {
- wx.showModal({title: '上传失败', content: JSON.stringify(res), showCancel: false});
- }
- });
- requestTask.onProgressUpdate(function (res) {
- console.log('正在进度:', res);
- });
- });
- };
- // 选择文件
- wx.chooseImage({
- count: 1, // 默认9
- sizeType: ['original'], // 可以指定是原图还是压缩图,这里默认用原图
- sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
- success: function (res) {
- uploadFile(res.tempFiles[0].path);
- }
- })
- };
- module.exports = uploadFile;
|