环境介绍:生产服务器开发人员需要给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实现打包下载功能的更多相关文章

  1. 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本

    06_Linux基础-NGINX和浏览器.网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本 一 ...

  2. Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. PHP实现zip压缩打包下载

    先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...

  4. JavaWeb多文件上传及zip打包下载

    项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分.  首先明确一点:  无法通过页面的无刷新ajax请求,直接发下载.上 ...

  5. python 打包下载 zipfile & tarfile

    看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来. 在python中,我们要做文件打包下载, ...

  6. 【Python学习 】Python实现的FTP上传和下载功能

    一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...

  7. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储   版权声明:本文为博主 ...

  8. Ansible + shell 实现部署fastdfs+nginx 实现图片服务器并提供动态缩放功能;

    因为公司阿里服务器变动几次,手动部署了好几次fastdfs+nginx,于是就想到了自动化部署,以下为脚本内容,由于只是想把着功能实现,并未有完完整的判断逻辑: 以下为ansible-playbook ...

  9. 简单的 FastDFS + Nginx 应用实例

    版权声明:本文为GitChat作者的原创文章,未经 GitChat 同意不得转载. https://blog.csdn.net/GitChat/article/details/79479148 wx_ ...

随机推荐

  1. Hibernate使用distinct返回不重复的数据,使用group by 进行分组

    //distinct使用 public List<String> distinctDutyDate() { String hql="select distinct(dutyDat ...

  2. windows平台使用 pthreads库

    note 近日封装一些跨平台库时, 发现线程的创建需要做平台的区分, windows的线程创建和Linux下的线程操作不一样.很麻烦,还要做平台区分. 能否在windows上使用pthread的线程库 ...

  3. C++字符串常量跨平台编译问题

    C++字符串常量跨平台编译问题(与字符串编码相关),有需要的朋友可以参考下. 1. 问题 在C++代码中,给一个string类型的变量赋值一个中文字符串常量,例如: string s = " ...

  4. 【LeetCode】112. 路径总和 Path Sum 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 回溯 BFS 栈 日期 题目地址:https ...

  5. Docker 与 K8S学习笔记(六)—— 容器的资源限制

    我们在启动Docker容器时,默认情况下容器所使用的资源是没有限制的,这样就会存在部分特别耗资源的容器会占用大量系统资源,从而导致其他容器甚至整个服务器性能降低,为此,Docker提供了一系列参数方便 ...

  6. 亲测:三个值得练手的Java实战项目

    测试奇谭,BUG不见. 大家好,我是谭叔. 一提到编码,很多小伙伴便感到头疼,特别是半路转行的小伙伴或者没有系统学习过计算机基础的小伙伴. 对于想学而不知道怎么学的小伙伴,我可以分享下我的策略: 刷一 ...

  7. isEmpty 和 isBlank 的区别

    一般使用Apache commons-lang3 工具包: commons-lang3 是专业的工具包,功能非常齐全.强大. 1.isEmpty 判断字符串是否为空字符串,只要有一个任意字符(包括空白 ...

  8. Are Loss Functions All the Same?

    目录 概 主要内容 一些假设 损失函数 损失函数的统计性质 收敛速度 分类的界 Rosasco L, De Vito E, Caponnetto A, et al. Are loss function ...

  9. Conditional Generative Adversarial Nets

    目录 引 主要内容 代码 Mirza M, Osindero S. Conditional Generative Adversarial Nets.[J]. arXiv: Learning, 2014 ...

  10. [云原生]Kubernetes - 集群搭建(第2章)

    目录 一.前置知识点 二.kubeadm部署方式介绍 三.安装要求 四.最终目标 五.准备环境 六.环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(所有节点) 6 ...