资料的压缩最好是能做在前端,因为网路最慢的地方就是前後端的沟通了,现在的压缩演算法有很多,举凡gzip、PKzip、LZW、zlib等等
我们的Lab追求简单,於是使用了python本身就有的zlib,压缩和解压缩的使用非常简单,如下
def compress(data):
return zlib.compress(data)
def decompress(data):
print(data)
return zlib.decompress(data)
https://github.com/kaichiachen/python-simple-object-storage/blob/master/utils/utils.py#L53
然後我们分别在upload object的时候进行压缩
content = compress(content.encode()) # content type will be byte after compress
hash = sha256(content)
size = len(content)
chunk = 10
for i in range(0, size, chunk):
res = requests.post(f"{server_url}/objects/{name}", files={
'obj': content[i:i+chunk],
'hash':hash,
'version': args.version,
'start': i,
'length': chunk,
'size': size})
以及download的时候解压缩
while len(content)<size:
try:
content += requests.get(f"{server_url}/objects/{name}?version={version}&start={start}").content
except KeyboardInterrupt:
sys.exit()
except Exception as e:
start = len(content)
print('Something wrong, downloading again...', e)
try:
print(f'Get content: {decompress(content).decode()}')
except Exception as e:
print(f'Something wrong: {e}')
於是乎,从使用者的角度来看,看起来就只是上传下载Object而已,性能的优化都在前端做好了
<<: 【在 iOS 开发路上的大小事-Day17】透过 Firebase 来管理使用者 (Sign in with Google 篇) Part1
承上篇 Refactor 上篇实作完成执行结果如上图所示,蓝色区块为该学生成绩,红色区块为新增成绩编...
Day 7 - Kotlin的条件判断 前面一天我们讲到Kotlin里面的var跟val,今天我们要...
**制作目标 ** 资料库搜寻 在输入料理搜寻模式後,会让使用者输入料理名称或一项食材,再从资料库里...
我们飞快的结束惹html ,css,欢迎进入到下一个阶段JavaScrip。JS的助教很严,学习之前...
本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...