python+fastdfs+nginx实现打包下载功能
环境介绍:生产服务器开发人员需要给client下发数据,主要是图片及视频;图片服务器用fastdfs,下载由nginx 来提供;
java 程序来调用此脚本,传递参数来决定打包文件内容;
#!/usr/bin/env python
#coding:utf-8
"""修改一些模块,使用python 自带模块;增加日志记录;"""
import sys,subprocess,os,time,json,shutil,logging
logname = time.strftime("%Y_%m_%d.log")
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=logname,
filemode='w')
class Global(object):
"""此脚本用来处理打包文件:传参来决定打包什么文件,并记录打包记录;
"""
def __init__(self):
pass def args_Counts(self): ##############检测参数的长度
counts = len(sys.argv)
if counts == 1 : ######windows test
sys.exit(10)
else:
if os.path.isfile('argv.txt'): ######检测这个存在这个文件
logging.warning("The argvs file is exist...,WARNING!----------- ")
os.remove('argv.txt') with open("argv.txt",'a+') as fp:
for i in sys.argv[1:]:
fp.write(i+"\n") def args_Change(self):
file_con = open("argv.txt",'r')
dirtory = ''
for i in file_con:
try:
argschange = json.loads(i) #########解析json
key = argschange.keys()[0] #########获取字典的key,目录的名字
name = argschange.get(key) #########获取字典的values,需要下载的文件名字----> list
dest = '/home/fastdfs/storage/data/' #####新fastdfs 的文件存储路
except Exception,e:
logging.warning("Something is wrong %s----------"%e)
sys.exit(10)
#dest = '/home/fastdfs/storage/files-data/data' #旧fastdfs if os.path.isdir(key):
logging.warning("The directory %s is exist and will delete it-----------"%key)
shutil.rmtree(key)
logging.info("The directory %s is not exist and will create it++++++++++"%key)
os.mkdir(key)
else:
logging.info("The directory %s is not exist and will create it++++++++++"%key)
os.mkdir(key) if os.path.isfile(key):
logging.warning("Error,program is Error----------")
sys.exit(20)
for i,k in enumerate(name): ########拷贝部分
dest_dir = os.path.dirname(k).split("M00/")[1] #########切割fastdfs 的文件路径,减少查找时间,精确查找
img_name = os.path.basename(k) #########合成路径
img_dest1 = dest+dest_dir+os.path.sep+img_name #########最近上传路径
img_dest2 = dest+"data/"+dest_dir+os.path.sep+img_name #########以前上传的路径
if os.path.isfile(img_dest1) : ###############################优化查找部分,并记录
logging.info("Find %s++++++++++"%img_name)
shutil.copy(img_dest1,key)
logging.info("Copy %s %s++++++++++"%(img_dest1,key))
else:
logging.warning("Not find %s and change directory to find ------"%img_name)
if os.path.isfile(img_dest2):
logging.info("Find %s++++++++++" % img_name)
shutil.copy(img_dest2, key)
logging.info("Copy %s %s++++++++++" % (img_dest2, key)) dirtory += key + ' '
# # print dirtory
bdass = time.strftime("%H%M%S")
zip_name = "bdass" + bdass + ".zip"
child_zip = subprocess.Popen('zip -r ' + zip_name +" "+ dirtory,shell=True)
child_zip.wait()
if os.path.isfile(zip_name):
logging.info("Compress successfuly++++++++++")
logging.info("End and Clean workplace++++++++++")
else:
logging.warning("Compress failed----------")
sys.exit(10)
shutil.move(zip_name,"/usr/local/nginx/html/download/")
print zip_name
file_con.seek(0)
for i in file_con:
argschange = json.loads(i) #########解析json
key = argschange.keys()[0] #########获取字典的key,目录的名字
if os.path.isdir(key):
shutil.rmtree(key) def zip_Images(self): #####结束部分,删除文件
if os.path.isfile('./argv.txt'):
os.remove('./argv.txt') system = Global()
if __name__ == "__main__":
logging.info("Begin" + "+" * 20)
system.args_Counts()
system.args_Change()
system.zip_Images()
调用命令:python remote_zip_enhance.py '{"2017092268":["group1/M00/00/00/rB95q1nCGD-AHb-fAAvTKbrr9GI895.png","group1/M00/00/0D/rB95rFm3iuGAYHO2AAjMFXpe4oI406.png","group1/M00/00/04/rB95rFmmja-AVWspAAx1vgabK-I426.png"]}' '{"2017092274":["group1/M00/00/00/rB95q1nCGD-AHb-fAAvTKbrr9GI895.png","group1/M00/00/0D/rB95rFm3iuGAYHO2AAjMFXpe4oI406.png","group1/M00/00/04/rB95rFmmja-AVWspAAx1vgabK-I426.png"]}'
此前写过基本功能的,有些BUG,打包偶尔有错误;
python+fastdfs+nginx实现打包下载功能的更多相关文章
- 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
06_Linux基础-NGINX和浏览器.网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本 一 ...
- Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- PHP实现zip压缩打包下载
先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...
- JavaWeb多文件上传及zip打包下载
项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上 ...
- python 打包下载 zipfile & tarfile
看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来. 在python中,我们要做文件打包下载, ...
- 【Python学习 】Python实现的FTP上传和下载功能
一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主 ...
- Ansible + shell 实现部署fastdfs+nginx 实现图片服务器并提供动态缩放功能;
因为公司阿里服务器变动几次,手动部署了好几次fastdfs+nginx,于是就想到了自动化部署,以下为脚本内容,由于只是想把着功能实现,并未有完完整的判断逻辑: 以下为ansible-playbook ...
- 简单的 FastDFS + Nginx 应用实例
版权声明:本文为GitChat作者的原创文章,未经 GitChat 同意不得转载. https://blog.csdn.net/GitChat/article/details/79479148 wx_ ...
随机推荐
- 总结Vue第一天:简单介绍、基本常用知识、辅助函数
总结Vue第一天:简单介绍.基本常用知识.辅助函数 中文官网:https://cn.vuejs.org/v2/guide/syntax.html 遇到不熟悉的可以先看一下官网,然后再看一下一些别人写的 ...
- 【LeetCode】263. Ugly Number 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 除去2,3,5因子 日期 [LeetCode] 题目 ...
- leetcode1261在受污染的二叉树中查找元素
题目 一颗二叉树,树根值为0,父节点为x,则左子值为2x+1,右子为2x+2.现在只有树的结构,所有值都变为-1被污染了.求污染前是否存在某个值. 构建一次树,查询会调用多次. 题解 这道题还是比较简 ...
- Adversarial Self-Supervised Contrastive Learning
目录 概 主要内容 Linear Part 代码 Kim M., Tack J. & Hwang S. Adversarial Self-Supervised Contrastive Lear ...
- MCMC using Hamiltonian dynamics
目录 算法 符号说明 Hamilton方程 物理解释 一些性质 可逆 Reversibility H的不变性 保体积 Volume preservation 辛 Symplecticness 离散化H ...
- Ubuntu 16.04远程配置Jupyter Notebook
安装和配置Jupyter Notebook 安装jupyter notebook conda conda install -c conda-forge notebook pip pip install ...
- [Opencv]几种对轮廓的处理方式
boundingRect() 作用:计算点集的右上边框. 形式:boundingRect(InputArray points): 参数:points:输入二维点集,并用std::vector or M ...
- CS5213替代AG6200 AG6201|HDMI转VGA带音频输出方案芯片
台湾安格AG6200 AG6201专门用于设计HDMI转VGA带音频输出的方案芯片,CS5213是一款HDMI to VGA转换器且结合了HDMI输入接口和模拟RGB DAC输出.带支持片上音频数模转 ...
- Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级.要求:定义方法实现学生成绩的评测功能. 学生的英语考试成绩进行评测,评测规 ...
- 【工具】Java转换exe
一.导出jar包 eclipse中对着要转换的项目,右键,导出 搜索jar,选择jar文件,下一步 选择要输出的项目 继续下一步 选择主程序 完成 二.下载及安装exe4j,并转换jar文件为exe文 ...