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_ ...
随机推荐
- Windows系统安装ActiveMQ
1.下载安装包:https://activemq.apache.org/components/classic/download/ 选择自己的版本进行下载 2.安装JDK 3.把下载的ActiveMQ压 ...
- SpringBoot 设置请求字符串格式为UTF-8
增加一个过滤器 package com.config; import com.jetsum.business.common.constant.CharsetConstant; import lombo ...
- 【LeetCode】942. DI String Match 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Matrix(poj2155)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25139 Accepted: 9314 Descripti ...
- 1092 - Lighted Panels
1092 - Lighted Panels PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 MB ...
- How Many Sets I(zoj3556)
How Many Sets I Time Limit: 2 Seconds Memory Limit: 65536 KB Give a set S, |S| = n, then how ma ...
- 「算法笔记」Polya 定理
一.前置概念 接下来的这些定义摘自 置换群 - OI Wiki. 1. 群 若集合 \(s\neq \varnothing\) 和 \(S\) 上的运算 \(\cdot\) 构成的代数结构 \((S, ...
- idea解决springboot项目中log4j漏洞升级问题
最近阿里云团队发现log4j漏洞,危险级别:严重,相关资讯 https://m.sohu.com/coo/hsdt/506958086_355140 https://www.sohu.com/a/50 ...
- 【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞
前言 iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛. UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具. 在选用防火墙工具的 ...
- SpringBoot 之 国际化
增加国际化i18n语言配置: # src/main/resources/i18n/login.properties login.btn=登录 # src/main/resources/i18n/log ...