123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 |
- var COS = require('./lib/cos-wx-sdk-v5');
- var wxfs = wx.getFileSystemManager();
- var config = require('./config');
- var { cos, requestCallback } = require('./tools');
- var TaskId;
- var mylog = function (msg) {
- wx.showToast({
- title: msg,
- icon: 'success',
- duration: 3000,
- });
- };
- // 对云上数据进行图片处理
- function request() {
- cos.request(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: 'photo.png',
- Method: 'POST',
- Action: 'image_process',
- Headers: {
- // 通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩
- 'Pic-Operations':
- '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}',
- },
- },
- (err, data) => {
- console.log(err || data);
- }
- );
- }
- function uploadFile() {
- var uploadFile = function (file) {
- cos.uploadFile(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: file.name,
- FilePath: file.path,
- FileSize: file.size,
- SliceSize: 1024 * 1024 * 5, // 文件大于5mb自动使用分块上传
- onTaskReady: function (taskId) {
- TaskId = taskId;
- },
- onProgress: function (info) {
- var percent = parseInt(info.percent * 10000) / 100;
- var speed = parseInt((info.speed / 1024 / 1024) * 100) / 100;
- console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
- },
- onFileFinish: function (err, data, options) {
- console.log(options.Key + '上传' + (err ? '失败' : '完成'));
- },
- },
- function (err, data) {
- console.log(err || data);
- }
- );
- };
- wx.chooseMessageFile({
- count: 10,
- type: 'all',
- success: function (res) {
- uploadFile(res.tempFiles[0]);
- },
- });
- }
- function uploadFiles() {
- var uploadFiles = function (files) {
- const fileList = files.map(function (file) {
- return Object.assign(file, {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: file.name,
- FilePath: file.path,
- });
- });
- cos.uploadFiles(
- {
- files: fileList,
- SliceSize: 1024 * 1024 * 5, // 文件大于5mb自动使用分块上传
- onProgress: function (info) {
- var percent = parseInt(info.percent * 10000) / 100;
- var speed = parseInt((info.speed / 1024 / 1024) * 100) / 100;
- console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
- },
- onFileFinish: function (err, data, options) {
- console.log(options.Key + '上传' + (err ? '失败' : '完成'));
- },
- },
- function (err, data) {
- console.log(err || data);
- }
- );
- };
- wx.chooseMessageFile({
- count: 10,
- type: 'all',
- success: function (res) {
- uploadFiles(res.tempFiles);
- },
- });
- }
- function sliceUploadFile() {
- var sliceUploadFile = function (file) {
- var key = file.name;
- cos.sliceUploadFile(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: key,
- FilePath: file.path,
- FileSize: file.size,
- CacheControl: 'max-age=7200',
- Headers: {
- aa: 123,
- },
- Query: {
- bb: 123,
- },
- onTaskReady: function (taskId) {
- TaskId = taskId;
- },
- onHashProgress: function (info) {
- console.log('check hash', JSON.stringify(info));
- },
- onProgress: function (info) {
- console.log(JSON.stringify(info));
- },
- },
- requestCallback
- );
- };
- wx.chooseMessageFile({
- count: 10,
- type: 'all',
- success: function (res) {
- sliceUploadFile(res.tempFiles[0]);
- },
- });
- // wx.chooseVideo({
- // sourceType: ['album','camera'],
- // maxDuration: 60,
- // camera: 'back',
- // success(res) {
- // var name = res.tempFilePath.replace(/^.*?([^/]{32}\.\w+)$/, '$1');
- // sliceUploadFile({
- // name: name,
- // path: res.tempFilePath,
- // size: res.size,
- // });
- // },
- // fail(err) {
- // console.log(err);
- // }
- // })
- }
- function postObject() {
- wx.chooseImage({
- count: 1, // 默认9
- sizeType: ['original'], // 可以指定是原图还是压缩图,默认二者都有
- sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
- success: function (res) {
- var file = res.tempFiles[0];
- cos.postObject(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: '1.png',
- FilePath: file.path,
- onTaskReady: function (taskId) {
- TaskId = taskId;
- },
- onProgress: function (info) {
- console.log(JSON.stringify(info));
- },
- },
- requestCallback
- );
- },
- });
- }
- function putObject() {
- wx.chooseMessageFile({
- count: 10,
- type: 'all',
- success: function (res) {
- var file = res.tempFiles[0];
- wxfs.readFile({
- filePath: file.path,
- success: function (res) {
- cos.putObject(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: file.name,
- Body: res.data, // 在小程序里,putObject 接口只允许传字符串的内容,不支持 TaskReady 和 onProgress,上传请使用 cos.postObject 接口
- Headers: {
- // 万象持久化接口,上传时持久化。例子:通过 imageMogr2 接口使用图片缩放功能:指定图片宽度为 200,宽度等比压缩
- // 'Pic-Operations': '{"is_pic_info": 1, "rules": [{"fileid": "desample_photo.jpg", "rule": "imageMogr2/thumbnail/200x/"}]}'
- },
- },
- requestCallback
- );
- },
- fail: (err) => console.error(err),
- });
- },
- fail: (err) => console.error(err),
- });
- }
- function putObjectStr() {
- cos.putObject(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: '1.txt',
- Body: 'hello world', // 在小程序里,putObject 接口只允许传字符串的内容,不支持 TaskReady 和 onProgress,上传请使用 cos.postObject 接口
- Headers: {
- aa: 123,
- },
- Query: {
- bb: 123,
- },
- },
- requestCallback
- );
- }
- function putObjectBase64() {
- var base64Url =
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABRFBMVEUAAAAAo/8Ao/8Ao/8Ao/8ApP8Aov8Ao/8Abv8Abv8AyNwAyNwAo/8Ao/8Ao/8Abv8Ao/8AivgAo/8AyNwAbv8Abv8AydwApf8Abf8Ao/8AbP8Ao/8AyNwAydwAbv8AydwApP8Ao/8AyNwAo/8AyNwAydsAyNwAxd8Aov8AyNwAytsAo/8Abv8AyNwAbv8Av+MAo/8AytsAo/8Abv8AyNwAo/8Abv8AqfkAbv8Aov8Abv8AyNwAov8Abv8Ao/8Abv8Ao/8AydwAo/8Ao/8Ate8Ay9oAvOcAof8AveAAyNwAyNwAo/8AyNwAy9kAo/8AyNwAyNwAo/8AqP8Aaf8AyNwAbv0Abv8Abv8AaP8Ao/8Ao/8Ao/8Ao/8Abv8AyNwAgvcAaP8A0dkAo/8AyNwAav8Abv8Ao/8Abv8AyNwAy9sAvOUAtePdkYxjAAAAZnRSTlMAw/co8uAuJAn8+/Tt29R8DAX77+nZz87Jv6CTh3lxTklAPjouJRsL5tjAuLiyr62roaCakYp0XVtOQTMyLiohICAcGRP49vTv5+PJurawq6mnnJuYl4+OiIB7eXVvX15QSDgqHxNcw3l6AAABe0lEQVQ4y82P11oCQQxGIy5FUJpKk6aAhV6k92LvvXedDfj+92ZkYQHxnnMxu3/OfJMEJo6y++baXf5XVw22GVGcsRmq431mQZRYyIzRGgdXi+HwIv86NDBKisrRAtU1hSj9pkZ9jpo/9YKbRsmNNKCHDXI00BxfMMirKNpMcjQ5Lm4/YZArUXyBYUwg40nsdr5jb3LBe25VWpNeKa1GENsEnq52C80z1uW48estiKjb19G54QdCrScnKAU69U3KJ4jzrsBawDWPuOcBqMyRvlcb1Y+zjMUBVsivAKe4gXgEKiVjSh9wlunGMmwiOqFL3RI0cj+nkgp3jC1BELVFkGiZSuvkp3tZZWZ2sKCuDj185PXqfmwI7AAOUctHkJoOeXg3sxA4ES+l7CVvrYHMEmNp8GtR+wycPG0+1RrwWQUzl4CvgQmPP5Ddofl8tWkJVT7J+BIAaxEktrYZoRAUfXgOGYHfcOqw3WF/EdLccz5cMfvUCPb4QwUmhB8+v12HZPCkbgAAAABJRU5ErkJggg==';
- var m = /data:image\/(\w+);base64,(.*)/.exec(base64Url) || [];
- var format = m[1];
- var bodyData = m[2];
- var fileBuf = wx.base64ToArrayBuffer(bodyData);
- cos.putObject(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: '1.' + format,
- Body: fileBuf,
- },
- requestCallback
- );
- }
- function getObjectUrl() {
- var url = cos.getObjectUrl(
- {
- Bucket: config.Bucket, // Bucket 格式:test-1250000000
- Region: config.Region,
- Key: '1mb.zip',
- Expires: 60,
- Sign: true,
- },
- function (err, data) {
- console.log(err || data);
- }
- );
- console.log(url);
- }
- var toolsDao = {
- request: request,
- 'uploadFile 高级上传': uploadFile,
- 'uploadFiles 批量上传': uploadFiles,
- 'sliceUploadFile 分片上传': sliceUploadFile,
- // 上传文件适用于单请求上传大文件
- 'postObject 简单上传': postObject,
- 'putObject 简单上传文件': putObject,
- 'putObject 上传字符串': putObjectStr,
- // 上传文件
- 'putObject base64 转 ArrayBuffer 上传': putObjectBase64,
- 'getObjectUrl 获取对象访问url': getObjectUrl,
- };
- var bucketDao = {
- // Service
- 'getService 获取存储桶列表': function () {
- cos.getService(requestCallback);
- },
- // 简单 Bucket 操作
- 'putBucket 创建存储桶': function () {
- cos.putBucket(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'headBucket 检索存储桶及其权限': function () {
- cos.headBucket(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'deleteBucket 删除存储桶': function () {
- cos.deleteBucket(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'getBucketACL 查询存储桶 ACL': function () {
- cos.getBucketAcl(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'putBucketACL 设置存储桶 ACL': function () {
- cos.putBucketAcl(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- ACL: 'public-read',
- },
- requestCallback
- );
- },
- 'getBucketCors 查询跨域配置': function () {
- cos.getBucketCors(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'putBucketCors 设置跨域配置': function () {
- cos.putBucketCors(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- ResponseVary: 'true',
- CORSRules: [
- {
- AllowedOrigin: ['*'],
- AllowedMethod: ['GET', 'POST', 'PUT', 'DELETE', 'HEAD'],
- AllowedHeader: ['*'],
- ExposeHeader: ['ETag', 'Content-Length'],
- MaxAgeSeconds: '5',
- },
- ],
- },
- requestCallback
- );
- },
- 'deleteBucketCors 删除跨域配置': function () {
- cos.deleteBucketCors(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'putBucketPolicy 设置存储桶策略': function () {
- var AppId = config.Bucket.substr(config.Bucket.lastIndexOf('-') + 1);
- cos.putBucketPolicy(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Policy: {
- version: '2.0',
- principal: {
- qcs: ['qcs::cam::uin/10001:uin/10001'],
- }, // 这里的 10001 是 QQ 号
- statement: [
- {
- effect: 'allow',
- action: [
- 'name/cos:GetBucket',
- 'name/cos:PutObject',
- 'name/cos:PostObject',
- 'name/cos:PutObjectCopy',
- 'name/cos:InitiateMultipartUpload',
- 'name/cos:UploadPart',
- 'name/cos:UploadPartCopy',
- 'name/cos:CompleteMultipartUpload',
- 'name/cos:AbortMultipartUpload',
- 'name/cos:AppendObject',
- ],
- // "resource": ["qcs::cos:ap-guangzhou:uid/1250000000:test-1250000000/*"] // 1250000000 是 appid
- resource: ['qcs::cos:' + config.Region + ':uid/' + AppId + ':' + config.Bucket + '/*'], // 1250000000 是 appid
- },
- ],
- },
- },
- requestCallback
- );
- },
- 'getBucketPolicy 查询存储桶策略': function () {
- cos.getBucketPolicy(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'deleteBucketPolicy 删除存储桶策略': function () {
- cos.deleteBucketPolicy(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'getBucketLocation 获取Bucket的地域信息': function () {
- cos.getBucketLocation(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'getBucketTagging 获取Bucket标签': function () {
- cos.getBucketTagging(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- 'putBucketTagging 设置Bucket标签': function () {
- cos.putBucketTagging(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Tagging: {
- Tags: [
- {
- Key: 'k1',
- Value: 'v1',
- },
- {
- Key: 'k2',
- Value: 'v2',
- },
- ],
- },
- },
- requestCallback
- );
- },
- 'deleteBucketTagging 删除存储桶标签': function () {
- cos.deleteBucketTagging(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- };
- var objectDao = {
- 'getBucket 获取对象列表': function () {
- cos.getBucket(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- },
- requestCallback
- );
- },
- // 上传文件适用于单请求上传大文件
- 'postObject 表单上传对象': postObject,
- 'putObject 简单上传文件': putObject,
- 'putObject 上传字符串': putObjectStr,
- // 上传文件
- 'putObject base64 转 ArrayBuffer 上传': putObjectBase64,
- 'getObject 下载对象': function () {
- cos.getObject(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: '1.png',
- },
- function (err, data) {
- console.log('getObject:', err || data);
- }
- );
- },
- 'abortUploadTask 抛弃分块上传任务': function () {
- cos.abortUploadTask(
- {
- Bucket: config.Bucket,
- /* 必须 */ // Bucket 格式:test-1250000000
- Region: config.Region,
- /* 必须 */
- // 格式1,删除单个上传任务
- // Level: 'task',
- // Key: '10mb.zip',
- // UploadId: '14985543913e4e2642e31db217b9a1a3d9b3cd6cf62abfda23372c8d36ffa38585492681e3',
- // 格式2,删除单个文件所有未完成上传任务
- Level: 'file',
- Key: '10mb.zip',
- // 格式3,删除 Bucket 下所有未完成上传任务
- // Level: 'bucket',
- },
- requestCallback
- );
- },
- };
- var advanceObjectDao = {
- 'sliceUploadFile 分块上传': function () {
- var sliceUploadFile = function (file) {
- var key = file.name;
- cos.sliceUploadFile(
- {
- Bucket: config.Bucket,
- Region: config.Region,
- Key: key,
- FilePath: file.path,
- FileSize: file.size,
- CacheControl: 'max-age=7200',
- Headers: {
- aa: 123,
- },
- Query: {
- bb: 123,
- },
- onTaskReady: function (taskId) {
- TaskId = taskId;
- },
- onHashProgress: function (info) {
- console.log('check hash', JSON.stringify(info));
- },
- onProgress: function (info) {
- console.log(JSON.stringify(info));
- },
- },
- requestCallback
- );
- };
- wx.chooseMessageFile({
- count: 10,
- type: 'all',
- success: function (res) {
- sliceUploadFile(res.tempFiles[0]);
- },
- });
- // wx.chooseVideo({
- // sourceType: ['album','camera'],
- // maxDuration: 60,
- // camera: 'back',
- // success(res) {
- // var name = res.tempFilePath.replace(/^.*?([^/]{32}\.\w+)$/, '$1');
- // sliceUploadFile({
- // name: name,
- // path: res.tempFilePath,
- // size: res.size,
- // });
- // },
- // fail(err) {
- // console.log(err);
- // }
- // })
- },
- 'sliceCopyFile 分块复制对象': function () {
- // 创建测试文件
- var sourceName = '1.txt';
- var Key = '1.slicecopy.exe';
- var sourcePath = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/' + sourceName;
- cos.sliceCopyFile(
- {
- Bucket: config.Bucket, // Bucket 格式:test-1250000000
- Region: config.Region,
- Key: Key,
- CopySource: sourcePath,
- SliceSize: 20 * 1024 * 1024, // 大于20M的文件用分片复制,小于则用单片复制
- onProgress: function (info) {
- var percent = parseInt(info.percent * 10000) / 100;
- var speed = parseInt((info.speed / 1024 / 1024) * 100) / 100;
- console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
- },
- },
- requestCallback
- );
- },
- cancelTask: function () {
- cos.cancelTask(TaskId);
- console.log('canceled');
- },
- pauseTask: function () {
- cos.pauseTask(TaskId);
- console.log('paused');
- },
- restartTask: function () {
- cos.restartTask(TaskId);
- console.log('restart');
- },
- };
- // require('./test');
- module.exports = {
- toolsDao: toolsDao,
- bucketDao: bucketDao,
- objectDao: objectDao,
- advanceObjectDao: advanceObjectDao,
- };
|