微信小程序样例-小相册python后台
最近在学微信小程序,在看了官方文档后,准备写一个demo练练手…可是前端代码太难写了. 去网上找到一个官方集合腾讯云小程序的示例. 想着先跑起来,再照着练习一下
- 小相册地址: weapp-demo-album
引用其中的介绍:
小相册是结合腾讯云对象存储服务(Cloud Object Service,简称COS)制作的一个微信小程序示例。在代码结构上包含如下两部分: app: 小相册应用包代码,可直接在微信开发者工具中作为项目打开 server: 搭建的Node服务端代码,作为服务器和app通信,提供 CGI 接口示例用于拉取 COS 图片资源、上传图片到 COS、删除 COS 图片
将应用包代码导入,服务端代码部署好运行,小相册没有丝毫反应…
由于倔(mei)强(qian),没有照着教程购买相应服务.导致一些坑点总结如下:
- 我的域名没有备案,无法在微信后台添加安全域名. 在微信开发者平台项目设置 选上不校验安全域名、TLS 版本以及 HTTPS 证书
- cos中 创建的Bucket 设置为公有读私有写访问权限.而且要预先上传一张图片,不然客户端什么都不显示.
- 腾讯云对象存储服务的api修改了,原项目的配置信息要做相应修改 配置改一下应该还是能运行起来的.js代码不熟,后来我也没有去再试 下面是我用python改写的小相册后台. 其它cos,服务器的一些相关配置参考原小相册项目.
参考文档:
#coding=utf-8
from flask import Flask
from flask import request
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from qcloud_cos import CosServiceError
from qcloud_cos import CosClientError
import json
app = Flask(__name__)
# appid已在配置中移除,请在参数Bucket中带上appid。Bucket由bucketname-appid组成
# 设置用户配置, 包括 secretId,secretKey 以及 Region
secret_id = 'xxxxxxxxxxxxxxxxx' # 替换为用户的secret_id
secret_key = 'xxxxxxxxxxxxxxxx' # 替换为用户的secret_key
region = 'ap-guangzhou' # 替换为用户的 Region
token = '' # 使用临时秘钥需要传入 Token,默认为空,可不填
bucket='photo-1252498671' # 访问资源域名的前缀, 为 Bucket名称-appid 可在bucket控制台域名管理处看到
config = CosConfig(Secret_id=secret_id, Secret_key=secret_key, Region=region, To ken=token)
# 获取客户端对象
client = CosS3Client(config)
@app.route('/list', methods=['GET', 'POST'])
def list():
# 调用接口获取文件列表
response = client.list_objects(
Bucket=bucket,
MaxKeys=100,
)
#将图片链接保存到
datalist = []
try :
for item in response['Contents']:
if item['Key'].endswith(('.png','.jpg')):
datalist.append('http://'+bucket+'.cos.'+region+'.myqcloud.com/' +item['Key'])
except:
pass
returnjson = {
'code': 0,
'msg': 'ok',
'data': datalist,
}
return json.dumps(returnjson)
@app.route('/upload', methods=['POST'])
def upload():
#获取请求文件
imgfile = request.files['image']
#获取文件名字
temp = imgfile.filename.rsplit('.')
filename = temp[1]+temp[0]
#获取文件字节流
imgfilebinary = imgfile.read()
#调用接口请求上传文件
response = client.put_object(
Bucket=bucket,
Body=imgfilebinary,
Key=filename,
CacheControl='no-cache',
)
returnjson = {
'code': 0,
'msg': 'ok',
'data': {'imgUrl':'http://'+bucket+'.cos.'+region+'.myqcloud.com/'+filen ame},
}
return json.dumps(returnjson)
@app.route('/delete', methods=['POST','GET'])
def delete():
#从请求参数获取文件名
filename=eval(request.data)['filepath']
#调用接口删除文件
response = client.delete_object(
Bucket=bucket,
Key= filename
)
returndata = {
'code': 0,
'msg': 'ok',
}
return json.dumps(returndata)
if __name__ == '__main__':
app.run(
host = '0.0.0.0',
port = 9993,
debug = True
)