我今年6月份毕业,最近在上海一家小公司实习,开发微信小程序。最近,我在工作中遇到了一个小问题。微信小程序图片上传到阿里云服务器oss耗时较长,特意记录一下。第一步:配置阿里云地址:我们公司的阿里云地址会变,所以需要从后台动态获取配置varclient=hprose.Client.create(app.globalym,["get_oss_config"]);客户。get_oss_config(******,*****).then(function(res){varres=JSON.parse(res);//后台返回的oss账号数据if(res.code==1){//判断是否获取env={//aliyunOSSconfiguploadImageUrl:'https://'+res.body.bucket+'.'+res.body.area+'.com',//root存在默认是Directory,你可以根据需要更改AccessKeySecret:res.body.accesskey,OSSAccessKeyId:res.body.accessid,timeout:87600//这是上传文件时Policy的过期时间};}},function(err){console.log('请求oss配置失败');console.log(err);});主要是这部分。这是配置内容env={//aliyunOSSconfiguploadImageUrl:'https://'+res.body.bucket+'.'+res.body.area+'.com',//根目录默认存在,可以根据需要更改AccessKeySecret:res.body.accesskey,OSSAccessKeyId:res.body.accessid,timeout:87600//这是上传文件时Policy的过期时间};第二步:参考上传图片模块constuploadImage=require('../../utils/uploadAliyun.js');上传阿里云.js内容constBase64=require('./Base64.js');require('./hmac.js');require('./sha1.js');constCrypto=require('./crypto.js');varenv=nullconstuploadFile=function(params){env=params.envsif(!params.filePath){wx.showModal({title:'图片错误',content:'请重试',showCancel:假,})返回;}constaliyunFileKey=params.dir+params.filePath.replace('wxfile://','');//在移动端注意检测//constaliyunFileKey=params.dir+params.filePath.replace('http://','');//在开发者工具中检测的注意事项constaliyunServerURL=env.uploadImageUrl;constaccessid=env。OSS访问ssKeyId;constpolicyBase64=getPolicyBase64();constsignature=getSignature(policyBase64);//console.log('aliyunFileKey=',aliyunFileKey);//console.log('aliyunServerURL',aliyunServerURL);wx.uploadFile({url:aliyunServerURL,filePath:params.filePath,name:'file',formData:{'key':aliyunFileKey,'policy':policyBase64,'OSSAccessKeyId':accessid,'signature':signature,'success_action_status':'200',},成功:函数(res){if(res.statusCode!=200){if(params.fail){params.fail(res)}return;}if(params.success){params.success(aliyunFileKey);}},fail:function(err){err.wxaddinfo=aliyunServerURL;if(params.fail){params.fail(err)}},})}constgetPolicyBase64=function(){让日期=新日期();date.setHours(date.getHours()+env.timeout);让srcT=date.toISOString();骗子stpolicyText={"expiration":srcT,//设置策略的过期时间"conditions":[["content-length-range",0,5*1024*1024]//设置上传的大小限制文件,5mb]};constpolicyBase64=Base64.encode(JSON.stringify(policyText));returnpolicyBase64;}constgetSignature=function(policyBase64){constaccesskey=env.AccessKeySecret;//console.log(accesskey)constbytes=Crypto.HMAC(Crypto.SHA1,policyBase64,accesskey,{asBytes:true});constsignature=Crypto.util.bytesToBase64(bytes);返回签名;}module.exports=uploadFile;注意,如果想在开发者工具中查看上传结果,请使用这段代码constaliyunFileKey=params.dir+params.filePath.replace('http://','');//在开发者工具中查看,注意在手机端使用这段代码,否则一定会报错!constaliyunFileKey=params.dir+params.filePath.replace('wxfile://','');//在手机上检测注意第三步:在需要上传图片的地方添加这段代码uploadImage({filePath:res.tempFilePaths[0],dir:"images/",success:function(res){console.log(res)},fail:function(res){console.log("上传失败")console.log(res)},envs:env})S??tep4:Base64,js,hmac.js,sha1.js,crypto.js,uploadAliyun.js源码在这里,如果您觉得本文对您有帮助,可以给我一个star吗,谢谢!最后,希望这篇文章对你有所帮助。确实可以在微信小程序中上传图片到阿里云。我也记录下来作为笔记。当然要感谢原文对我的帮助,不然我一个菜鸟怎么解决这个问题,哈哈!扫描过往文章数据结构与算法-LeetCode格雷编码(No.89)数据结构与算法-LeetCode种花题(No.605)LeetCode-电话号码字母组合(No.17)Recursion+hashJavaScript数据结构与算法你懂吗知道算法题吗?
