当前位置: 首页 > Web前端 > HTML5

0元免费服务器,开发个人专属网盘-云开发WEB最佳实践

时间:2023-04-05 01:12:35 HTML5

介绍有时候我们传输文件的场景特别难受。例如,当我们去打印店打印文件时,一般来说,我们登录社交软件,然后传输文件,最后退出;除了安全性极差之外,它还非常麻烦。即使在我们自己的设备上,使用社交软件传输文件也会面临存储大小的限制,我们不得不依赖存储介质来完成传输。为什么不做一个工具来解决这个不舒服的问题呢?我希望有一种工具只要有互联网就可以使用,并且没有文件传输限制。最重要的是,传输效率不能低于社交软件。对于程序员来说,只要心中有想法,就没有实现不了的事情。阻碍程序员实现的最大障碍是技术方法。我早就有这个想法了,但是根据我自己的需求,我需要一台服务器,我需要很强的带宽,这些都足以让我止步不前了。WEB云开发一推出,我眼前一亮。细细品味,觉得粮草到位,可以开战了。按照自己的想法实践,解决了一点问题后,我的跨平台文件转储工具就完成了。为此,我将其命名为FILES。这是FILES的最终形式,它包括两个核心和基本功能,保存文件和获取文件。保存文件时可以选择添加存储密码,也可以勾选后删除。存储密码的目的是为了防止他人窃取密码,增加存储的安全性。每个文件保存6小时,6小时内可以任意取回文件,不限次数,特别适合多人发送大文件。勾选立即删除时,文件在第一次取回后将被删除,不再取回。上传成功的文件会显示如下表格,类似取货凭证;您可以将凭证复制给您要发送的人。您可以随时查看您存储的文件,里面会有文件的基本信息和剩余存储时间。提取文件时,需要提供提取编号和存储密码。如果保存文件时没有设置密码,则保存密码可以为空。点击下载文件时,会弹出腾讯验证码,防止出现恶意刷机界面。您需要使用该工具才能知道它。下面来做一波实测。首先上传一个400M的文件并进行上传测试:使用工具上传,在笔者自身网络情况下,发送带宽为5-8Mbps,峰值可达14Mbps。为了证明是笔者自身的10M网速拖累了工具的传输速度,这里给出网络测试的上传速度(本次测速节点为上海电信)。再来看看下载速度,也是受制于笔者的网络和下载文件的速度,基本维持在2M/S的水平。下面我们来对比一下常用的传输文件的QQ速度。在同一台计算机上上传和传输文件。.由于笔者使用的是按量付费的云开发,所以比较划算。用了半个月,传了很多文件,成本也没超过5元。作者公开使用网址:https://f.dnuise.cn技术细节在前端页面逻辑的实现中,使用原生JS配合WEB云开发SDK包与云开发后端服务进行交互.初始登录:使用前需要客户端认证,否则云开发无法进行文件和数据库权限分配。之前云开发有微信认证,但是使用门槛太高,不适合做旅游网开发。基于目前的Web云开发能力,我们引入了匿名登录和自定义登录,完美满足绝大部分的开发需求。FILES使用匿名登录进行初始化,代码详情如下:/***启动服务*/window.onload=function(){try{initTcb();}catch(e){showModel('此浏览器不支持文件服务,请换个浏览器打开!',40000,'error');}};/***云开发SDK初始化服务(匿名登录)*@paramsuccess成功回调*/functioninitTcb(success=()=>{}){app=tcb.init({env:'cloud-8b9880'});constauth=app.auth();//匿名登录方法auth.signInAnonymously().then(()=>{auth.getLoginState().then((e)=>{uid=e.credential.refreshToken;console.log('匿名登录成功,初始化完成!');initFlag=true;success();});}).catch(err=>{showModel('初始化失败,请检查网络并重新刷新页面!如果一直出现这种情况,请反馈给腾讯云开发',10000,'error');});}执行匿名页面加载时登录方法,登录成功后,可以使用web-sdk包做更多的事情来与云开发后台服务进行交互。上传文件:我们在网页上选择文件,设置密码,删除逻辑后,需要调用云端开发的文件上传接口来上传文件。functionuploadFile(){//前面的逻辑标志判断是否登录if(initFlag){letfileName=fileSaver.files[0].name;让nowTime=newDate().getTime();//文件上传APIapp.uploadFile({cloudPath:uid+'/'+nowTime+'/'+fileName,filePath:fileSaver.files[0],//上传监控onUploadProgress:function(progressEvent){letpercentCompleted=Math.round((progressEvent.loaded*100)/progressEvent.total);}},function(err,res){if(err){console.log('上传文件失败,请重新上传![权限或网络异常]');}else{app.callFunction({name:'upload',data:{file:res.fileID,key:getElm('userKey').value,name:fileName,one:getElm('oneTime').checked,uid:uid}}).then(res=>{console.log(res);if(res.result.code===0){showModel('上传文件成功!',3000,'成功');}else{showModel('文件确认失败,请检查网络并重新上传!如果不是第一次,可能是用户太多,请稍后再试',6000,'error');}}).catch(err=>{showModel('文件确认失败,请检查网络并重新上传![权限或网络异常]',6000,'错误');});}});}else{showModel('当前未初始化,请刷新页面!如果一直出现这种情况,请反馈给腾讯云开发',10000,'error');}}上传完成后会调用云函数上传,将文件的存储路径和设置信息保存到数据库中文件下载:下载文件使用腾讯云验证码时,需要获取用户IP地址。这样一来,原来的云函数调用就失去了作用。CloudFunctions引入了一个非常有用的功能,即HTTP触发。使用http触发器,客户端可以像普通的http请求一样调用云函数,调用的请求头也会被云函数获取。FILES使用HTTP请求访问云函数实现下载功能代码如下:WEB页面函数downloadFile(res){//获取腾讯验证码状态if(res.ret!==0)return;//判断微信客户端if(isWeClient()){showModel('本浏览器不支持下载文件,请使用其他浏览器!',10000,'error');返回;}letno=getElm('downNo').value;//取件号码letkey=getElm('downKey').value;//取件密码//作者自己封装的HTTP请求方法(JSON)calls({url:'https://tcb-url/getFile',data:{uid:uid,no:no,key:key,code:res},success(res){if(res.result.result.code===0){showModel('文件请求成功,正在启动下载!',3000,'success');//作者封装了文件下载方法downLoad(res.result.result.url,res.result.result.name);}elseif(res.result.result.code===1){showModel('取件号不存在,或密码错误!',6000,'警告');}else{showModel('系统繁忙,可能是用户太多,请稍后再试!',6000,'错误');}},fail(){showModel('系统繁忙,正在维护,请稍后重试!',6000,'error');}});}云函数端:consttcb=require("tcb-admin-node");constrequest=require('request')tcb.init({env:"env-id"});letCallWeb=(obj)=>{//请求腾讯验证码的真实性returnnewPromise((resolve,reject)=>{request({url:'https://ssl.captcha.qq.com/ticket/verify'+'&Ticket='+obj.ticket+'&Randstr='+obj.randstr+'&UserIP='+obj.ip,method:'GET'},(error,response,body)=>{if(error){拒绝(错误);}resolve((typeofresponse.body==='object')?response.body:JSON.parse(response.body));});});}exports.main=asyncevent=>{letAllowOrigin\='https://tcb.cn'//设置同源策略,只接收来自该源的请求if(event.headers.origin==="https://tcb.cn"||event.headers.origin==="http://tcb.cn"){AllowOrigin=event.headers.origin;}console.log(event.body);让结果={};constip=event.headers["x-real-ip"];if(event.body!=null&&event.body\[0\]==='{'&&JSON.parse(event.body).code!=null){constdata=JSON.parse(event.body);result=awaitCallWeb({ticket:data.code.ticket,randstr:data.code.randstr,ip:ip});//如果腾讯验证码为真则调用downFILE获取文件地址if(result.err_msg==="OK"){result=awaittcb.callFunction({name:"downFile",data:data});}else{result.code=300;}}else{result.code=404;}return{statusCode:200,headers:{'content-type':'application/json','Access-Control-Allow-Origin':AllowOrigin,'Access-Control-Allow-Methods':"POST,OPTIONS",'Access-Control-Max-Age':'3600','Access-Control-Allow-Headers':'Content-Type'},body:{result}};}未来规划========FILES将是一个跨平台的存储工具,这意味着它需要同时支持微信小程序、QQ小程序,让您轻松选择微信文件和QQ文件。跨平台特性是官方云开发所擅长的,所以再过几个月,小程序版的FILES存储就会出现。.这是真正的跨平台无缝传输。为了共同学习交流,提升产品功能和效率,作者将项目开源,欢迎有兴趣的开发者试用。RAEDME项目中介绍了详细的部署和操作步骤。项目地址:关注公众号「腾讯云开发」回复关键字“存储”获取。CloudDevelopment(CloudBase)是一个云集成的产品解决方案。采用Serverless架构,避免环境搭建等运维工作。支持一云多端,帮助快速构建小程序、Web应用、移动应用。技术文档:https://www.cloudbase.net/微信搜索:腾讯云开发,获取项目最新进展