python requests 上传文件_Python 实现小程序云存储文件上传

2c3b87ab85ab6d8d7690d2efa70e5552.png

自己定期有听BBC六分钟英语的习惯。但BBC六分钟官网由于大家都了解的缘故,不能直接访问。也不想装别的APP,就想着何不自己做个小程序?

二、

想到就做。做为一个方便自己的小程序,不需要很复杂的架构。

闲置的DigitalOcean服务器下载音频和对话脚本,传回国内COS。最后用小程序展示就好了。

从写抓取脚本和小程序制作上线花了大概一天的时间。上线后发了几个微信群,引来了100多个用户。也反馈了一些问题,最多的就是加载慢。。

虽然只为自己兴趣制作的,那既然引来了用户。咱也不是乔布斯,不能不听用户的反馈。没什么说的上CDN。

三、

上完CDN,速度有了。也就没再去管了,之后就一直在佛系运营。

直到17号开发者社区推送了一条消息:可以外网上传文件到云存储了!

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/index.html

说实话,之前也考虑过小程序里的云存储,但好像只能通过开发者工具人工上传。。 这很不极客。

所以收到这条推送之后第一时间就去看了文档,理了一遍小程序云存储上传逻辑是:

step1: 用小程序Appid 和Appsecret 拿 Access_token

step2: 用拿到的Access_token拿文件上传URL和相关参数

step3: 用拿到的URL和相关参数拼接完整的POST请求来上传文件

四、

理顺了逻辑,接下来就是码代码了。

Python用来http请求的,选用requests,相信没人挑错的。

首先:拿access_token

def get_token():    token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + ID + "&secret=" + SECRET    try:        token = requests.get(token_url)        token = token.json()        return token["access_token"]    except Exception as e:        logging.error(e)

然后,用access_token获取文件上传相关参数

def get_upload_url(token, env, path):    post_url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=" + token    playload = json.dumps({"env":env, "path":path})    try:        upload = requests.post(post_url, data=playload)        return upload.json()    except Exception as e:        logging.error(e)

拿到参数后需要解析重新拼接来完成上传:

def parse_form(res):    form = {}        form["key"] = res["url"].split("/")[-1]    form["Signature"] = res["authorization"]    form["x-cos-security-token"] = res["token"]    form["x-cos-meta-fileid"] = res["cos_file_id"]    return (form, res["url"])

最后,就是上传了:

def upload(res, file):        form = res[0]    upload_url = res[1]    with open(file, "rb") as f:        form["file"] = f.read()            try:        success = requests.post(upload_url, files=form)    except Exception as e:        logging.error(e)

完整源码可以添加个人微信 iKeepLearn 获取

03b3e6114282631f4898b3a56e231933.png

结语、

作为一个小小的小程序,腾讯提供的云开发资源还是能满足的。

存储上传次数由 2 万/天调整为 60 万/月存储下载次数由 5 万/天调整为150 万/月去除数据库 QPS 限制数据库单集合索引调整为系统参数限制,由原有 10 个调整为 20 个云函数数量调整为系统参数限制,由原有 20 个调整为 50 个增加数据库流量说明,单次出包大小为 16 M

至于超出了给的配额怎么办?直接上社区官方人员的回复好了。

ec9e8b48d38592326a01c1a7fad8c33f.png

最后放上自己做的小程序,6minute 同步更新BBC Learning English。

0089ae5f4d887edce7ffba62f6273c28.png

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值