- Python 实现小程序云存储文件上传
一、 自己定期有听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 获取 最后放上自己做的小程序,6minute 同步更新BBC Learning English。 [图片]
2019-05-22 - api接口调用,处理上传文件链接?(已解决)
[图片][图片] [图片]大佬帮忙看看处理上传链接那怎么写吧?存储不到云存储里边去 [图片]
2019-09-06 - 云开发http上传文件代码
const request = require('request-promise') const config = require('./config'); const fs = require('fs') module.exports = async (ctx) => { const files = ctx.request.files //koa2后台接收到文件组,需要npm koa-body且multipart : true let file = files[0] try { let options = { uri: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appId +'&secret=' + config.appSecret + '', json:true } let {access_token} = await request(options) //得到access_token let fileName = `example.jpg` let filePath = `dir/${fileName}` options = { method: 'POST', uri: 'https://api.weixin.qq.com/tcb/uploadfile?access_token=' + access_token + '', body: { "env": 'cloud-a8eeXX', "path": filePath, }, json: true } let res = await request(options) //获得文件上传许可以及各种参数 options = { method: 'POST', uri: res.url, formData: { "Signature": res.authorization, "key": filePath, "x-cos-security-token": res.token, "x-cos-meta-fileid": res.cos_file_id, "file": { value: fs.createReadStream(file.path), options: { filename: fileName, contentType: file.type } } } } ctx.body = await request(options) //上传文件,cox.body返回结果给前端 } catch (err) { console.log(err.stack) } } [图片]
2020-10-20 - php调用security.imgSecCheck图片检测,很黄的图片都能通过怎么回事呢?
代码: $obj = new \CURLFile(realpath($filePath)); $obj->setMimeType("image/jpeg"); $file['media'] = $obj; $url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=".$accessToken; $info = $this->http_request($url,$file); $info = json_decode($info,true); dump($info); //HTTP请求(支持HTTP/HTTPS,支持GET/POST) private function http_request($url, $data = null) { $curl = curl_init(); // curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data')); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS,$data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; } 任何图片及大小,接口返回的都是ok,麻烦大神们帮我看下问题出在哪儿 [图片]
2019-09-25