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_ ...
随机推荐
- Flink使用IDEA进行jar打包
pom文件增加 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>mav ...
- c++之快速排序改进(随机值)
数量少(5~25),插入排序很高效 一个影响快排效率的因素就是: 基准值的选择 本文将演示一种随之法的快排 改进前 void quick_sort5(int arr[], int low, int h ...
- 【LeetCode】60. Permutation Sequence 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 1120 机器人走方格 V3
1120 机器人走方格 V3 基准时间限制:1 秒 空间限制:131072 KB N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走, ...
- 基于内存的关系数据库memsql初探
背景 广告系统中,算法模型预估需要根据广告的实时转化统计结果,才能做出更精准的预估:同时,支持多维度聚合查询(例如按照广告各个不同层级维度,按照时间不同粒度的维度),并跨大区合并.一开始的版本是基于m ...
- Codeforces 919D:Substring(拓扑排序+DP)
D. Substring time limit: per test3 seconds memory limit: per test256 megabytes inputstandard: input ...
- elasticsearch之多索引查询
一.问题源起 在elasticsearch的查询中,我们一般直接通过URL来设置要search的index: 如果我们需要查询的索引比较多并且没有什么规律的话,就会面临一个尴尬的局面,超过URL的长度 ...
- JDK httpClient 详解(源码级分析)——概览及架构篇
1. 前言 2018年9月,伴随着java 11的发布,内置的httpclient正式登上了历史的舞台.此前,JDK内置的http工具URLConnection性能羸弱,操作繁琐,饱受诟病,也因此令如 ...
- 在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期 在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 Date 对象,在页面上显示一个万年历.选择不同的年份和月份,在页面中显示当前月的日历 实现思路: 在页面中添加两个 <s ...
- 集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
@ 目录 一.前言 二.为什么线程不安全 三.解决方案一CopyOnWriteArrayList (推荐,读多写少场景) 四.Collections.synchronizedList(加锁) 五.Ve ...