微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一)

马肤

温馨提示:这篇文章已超过439天没有更新,请注意相关的内容是否还可用!

摘要:微信小程序通过集成腾讯云COS对象存储服务,实现了图片和文件的便捷保存。利用COS对象存储的高效性和可靠性,小程序可以轻松地处理用户上传的图片和文件,并将其安全地存储在云端。这一举措不仅简化了小程序的文件管理,还提高了数据存储的安全性和稳定性,优化了用户体验。

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, t h i s − > j s o n 2 s t r ( this->json2str( this−>json2str(params));

r e s u l t = c u r l e x e c ( result = curl_exec( result=curle​xec(ch);

if(curl_errno($ch)) r e s u l t = c u r l e r r o r ( result = curl_error( result=curle​rror(ch);

curl_close($ch);

r e s u l t = j s o n d e c o d e ( result = json_decode( result=jsond​ecode(result, 1);

if (isset($result[‘Response’])) {

$result = $result[‘Response’];

$result[‘startTime’] = $result[‘ExpiredTime’] - $config[‘durationSeconds’];

}

$result = t h i s − > b a c k w a r d C o m p a t ( this->backwardCompat( this−>backwardCompat(result);

return $result;

}

// get policy

function getPolicy($scopes){

if (!is_array($scopes)){

return null;

}

$statements = array();

for($i=0, c o u n t s = c o u n t ( counts=count( counts=count(scopes); $i

$actions=array();

$resources = array();

array_push($actions, s c o p e s [ scopes[ scopes[i]->get_action());

array_push($resources, s c o p e s [ scopes[ scopes[i]->get_resource());

$principal = array(

‘qcs’ => array(‘*’)

);

$statement = array(

‘actions’ => $actions,

‘effect’ => ‘allow’,

‘principal’ => $principal,

‘resource’ => $resources

);

array_push($statements, $statement);

}

$policy = array(

‘version’ => ‘2.0’,

‘statement’ => $statements

);

return $policy;

}

}

class Scope{

var $action;

var $bucket;

var $region;

var $resourcePrefix;

function __construct($action, $bucket, $region, $resourcePrefix){

$this->action = $action;

$this->bucket = $bucket;

$this->region = $region;

$this->resourcePrefix = $resourcePrefix;

}

function get_action(){

return $this->action;

}

function get_resource(){

i n d e x = s t r r i p o s ( index = strripos( index=strripos(this->bucket, ‘-’);

b u c k e t N a m e = s u b s t r ( bucketName = substr( bucketName=substr(this->bucket, 0, $index);

a p p i d = s u b s t r ( appid = substr( appid=substr(this->bucket, $index + 1);

if(!(strpos($this->resourcePrefix, ‘/’) === 0)){

$this->resourcePrefix = ‘/’ . $this->resourcePrefix;

}

return ‘qcs::cos:’ . $this->region . ‘:uid/’ . $appid . ‘:prefix//’ . $appid . ‘/’ . $bucketName . $this->resourcePrefix;

}

}

?>

4、下载cos-wx-sdk-v5.js

下载地址:https://github.com/tencentyun/cos-wx-sdk-v5/blob/master/demo/lib/cos-wx-sdk-v5.js

5、微信小程序创建config.js,用于保存对象存储参数,代码如下:

module.exports = {

stsUrl: ‘https://后端网址/car/getSts.html’,//后端获取签名

Bucket: ‘myfaka-1256433534’,//存储桶名称

Region: ‘ap-guangzhou’,//所属地域

};

把cos-wx-sdk-v5.js和config.js都放到项目里:

微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第1张

6、index.wxml代码:

{ fileList }}” upload-text=“添加图片” bind:after-read=“afterRead” bind:delete=“delFile"multiple=”{{true}}" /

特别说明:这里使用的是vant-weapp的文件上传组件,vant框架地址:https://github.com/youzan/vant-weapp

7、index.js代码:

//获取应用实例

const app = getApp()

var COS = require(‘./cos-wx-sdk-v5’)

var config = require(‘./config’);

var toastMsg = ‘’;

//初始化COS对象

var cos = new COS({

// 获取签名

getAuthorization: function(options, callback) {

wx.request({

url: config.stsUrl, // 服务端获取签名

dataType: ‘json’,

success: function(result) {

var data = result.data;

var credentials = data.credentials;

callback({

TmpSecretId: credentials.tmpSecretId,

TmpSecretKey: credentials.tmpSecretKey,

XCosSecurityToken: credentials.sessionToken,

ExpiredTime: data.expiredTime,

});

}

});

}

});

Page({

/**

  • 页面的初始数据

    */

    data: {

    fileList: [],

    date: ‘’

    },

    /**

    • 生命周期函数–监听页面加载

      */

      onLoad: function(options) {

      //获取时间,作为图片文件夹名,如20191207

      this.setData({

      date: app.globalData.util.dateFormat(new Date(), “YMD”)

      });

      //清除缓存

      //wx.removeStorageSync(‘fileList’);

      //获取缓存中的地址

      this.updateData();

      },

      afterRead(event) {

      toastMsg = “上传”;

      var that = this;

      // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式

      /* 单个上传 */

      /*

      const { file } = event.detail;

      var filePath = file.path;

      var filename = new Date().getTime() + ‘.’+ filePath.substr(filePath.lastIndexOf(‘.’) + 1);

      //文件相对路径名

      var relativePath = ‘upload/’ + that.data.date + ‘/’ + filename;

      cos.postObject({

      Bucket: config.Bucket,

      Region: config.Region,

      Key: relativePath,

      FilePath: filePath,

      onProgress: function (info) {

      }

      }, requestCallback);

      //添加到预览中

      var img = {

      id: i,

      url: app.globalData.cosUrl + relativePath,

      name: filename

      }

      //读取缓存

      let list = wx.getStorageSync(‘fileList’);

      if (list) {

      list.push(img);

      } else {

      list = [img];

      }

      //存入缓存

      wx.setStorageSync(‘fileList’, list);

      //延迟更新数据

      setTimeout(function () {

      that.updateData();

      }, 5000);

      */

      /* 批量上传 */

      var files = event.detail.file; //数组

      for (var i = 0; i

      var filePath = files[i].path;

      var filename = new Date().getTime() + ‘.’ + filePath.substr(filePath.lastIndexOf(‘.’) + 1);

      //文件相对路径名

      var relativePath = ‘upload/’ + that.data.date + ‘/’ + filename;

      cos.postObject({

      Bucket: config.Bucket,

      Region: config.Region,

      Key: relativePath,

      FilePath: filePath,

      onProgress: function(info) {

      }

      }, requestCallback);

      //添加到预览中

      var img = {

      id: i,

      url: app.globalData.cosUrl + relativePath,

      name: filename

      }

      //读取缓存

      let list = wx.getStorageSync(‘fileList’);

      if (list) {

      list.push(img);

      } else {

      list = [img];

      }

      //存入缓存

      wx.setStorageSync(‘fileList’, list);

      }

      //延迟更新数据

      setTimeout(function () {

      that.updateData();

      }, 5000);

      },

      delFile(event) {

      toastMsg = “删除”;

      var that = this;

      wx.showModal({

      title: ‘提示’,

      content: ‘确定要删除这张图片吗?’,

      success(res) {

      if (res.confirm) {

      var index = event.detail.index;

      //读取缓存

      let list = wx.getStorageSync(‘fileList’);

      var filename = list[index].name;

      //更新fileList中的数据

      for (let i = 0; i

      //如果item是选中的话,就删除它。

      if (filename == list[i].name) {

      // 删除对应的索引

      list.splice(i, 1);

      break;

      }

      }

      //更新缓存

      wx.setStorageSync(‘fileList’, list);

      //更新数据

      that.updateData();

      //删除cos对象存储中的图片

      cos.deleteObject({

      Bucket: config.Bucket,

      Region: config.Region,

      Key: ‘upload/’ + that.data.date + ‘/’ + filename,

      }, requestCallback);

      } else if (res.cancel) {

      //console.log(‘用户点击取消’)

      }

      }

      })

      },

      //更新数据

      updateData() {

      this.setData({

      fileList: wx.getStorageSync(‘fileList’)

      });

      },

      })

      // 回调函数

      var requestCallback = function(err, data) {

      //console.log(err || data);

      if (err && err.error) {

      wx.showModal({

      title: ‘返回错误’,

      content: ‘请求失败:’ + (err.error.Message || err.error) + ‘;状态码:’ + err.statusCode,

      showCancel: false

      });

      } else if (err) {

      wx.showModal({

      title: ‘返回错误’,

      content: ‘请求出错:’ + err + ‘;状态码:’ + err.statusCode,

      showCancel: false

      });

      } else {

      wx.showToast({

      title: toastMsg + ‘成功’,

      icon: ‘success’,

      duration: 3000

      });

      }

      };

      上面以当天日期为目录是用了工具类的,附加util.js时间格式化的代码:

      const formatTime = date => {

      const year = date.getFullYear()

      const month = date.getMonth() + 1

      const day = date.getDate()

      const hour = date.getHours()

      const minute = date.getMinutes()

      const second = date.getSeconds()

      return [year, month, day].map(formatNumber).join(‘/’) + ’ ’ + [hour, minute, second].map(formatNumber).join(‘:’)

      }

      const formatNumber = n => {

      n = n.toString()

      return n[1] ? n : ‘0’ + n

      }

      /**

      • 时间戳转化为年 月 日 时 分 秒

      • number: 传入时间戳

      • format:返回格式,支持自定义,但参数必须与formateArr里保持一致

        */

        function dateFormat(number, format) {

        var formateArr = [‘Y’, ‘M’, ‘D’, ‘h’, ‘m’, ‘s’];

        var returnArr = [];

        var date = new Date(number);

        returnArr.push(date.getFullYear());

        returnArr.push(formatNumber(date.getMonth() + 1));

        returnArr.push(formatNumber(date.getDate()));

        returnArr.push(formatNumber(date.getHours()));

        returnArr.push(formatNumber(date.getMinutes()));

        returnArr.push(formatNumber(date.getSeconds()));

        for (var i in returnArr) {

        format = format.replace(formateArr[i], returnArr[i]);

        }

        return format;

        }

        自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

        因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第2张

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第3张

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第4张

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第5张

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第6张

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

        如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第7张

        结尾

        如何才能让我们在面试中对答如流呢?

        答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第8张

        这里是一份BAT大厂面试资料专题包:

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第9张

        好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

        《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

        0782452)]

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

        如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

        微信小程序使用腾讯云COS对象存储保存图片和文件(1),微信小程序,利用腾讯云COS对象存储保存图片和文件攻略(一) 第7张

        结尾

        如何才能让我们在面试中对答如流呢?

        答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

        [外链图片转存中…(img-YOH8TwtE-1712410782452)]

        这里是一份BAT大厂面试资料专题包:

        [外链图片转存中…(img-yIqRqole-1712410782452)]

        好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

        《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码