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,打包偶尔有错误;

时间: 2024-11-05 19:02:49

python+fastdfs+nginx实现打包下载功能的相关文章

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

因为公司阿里服务器变动几次,手动部署了好几次fastdfs+nginx,于是就想到了自动化部署,以下为脚本内容,由于只是想把着功能实现,并未有完完整的判断逻辑: 以下为ansible-playbook及shell及模板nginx-fastdfs及动态缩略图配置; 如有错误,请不吝赐教: --- - hosts: apollo # vars: # filedest: /usr/local/ tasks: - name: prepare fastdfs-nginx-module copy: src=

Nginx 配置下载功能的服务器详细

功能需求:由于公司有很多的日志文件需要整理,并且需要相关人员去下载查看,为了简便,我搭建了nginx服务并且将日志文件 放到 相应的目录下,用以方便相关人员下载查看,于是很快把nginx服务就搭建完了,但是尴尬的事情出现了,当点击日志文件时发现txt结尾的文档,直接被浏览器打开了,几千行的数据全都打印在浏览器上.于是就想到将nginx配置成可下载的. 1.环境 系   统: Centos6.5 基础服务: Nginx 版本 nginx/1.6.0 2.修改配置文件,以支持 以txt 结尾的文件能

FastDFS + Nginx 反向代理缓存 安装与配置

FastDFS + Nginx 反向代理缓存 安装与配置 作者:斯巴达克斯 时间:March 26, 2015 分类:存储 操作系统 CentOS release 6.5 (Final) 64 nginx相关软件 nginx-1.4.7 下载地址: http://nginx.org/en/download.html#nginx清除缓存模块 ngx_cache_purge-2.1 http://labs.frickle.com/nginx_ngx_cache_purge/pcre-8.36 ftp

debian 系统python+uwsgi+nginx实现web环境

1,python web部署的实现: python+uwsgi+nginx实现web. 本文测试环境: 服务器:树莓派B+ 操作系统: [email protected]:~# cat /etc/issue Raspbian GNU/Linux 7 \n \l IP: [email protected]:~# ip ad s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN      link/loopbac

FastDFS + Nginx module

前言 新项目使用FastDFS 已经有一段时间了,最近又与Nginx 做了结合.趁有时间,做下整理. 需求 使用FastDFS 存储资源(图片.文档.音频.视频...)文件,使用Nginx 提供资源请求服务. PS:FastDFS特别适合大中型网站使用,所以这里选型时一定要注意.不是说小型不适用,而是一定要想清楚,是否一上来就有必要使用DFS这类应用.对于中小型网站,使用本地文件系统.NFS或Samba,就可以很好的解决此类需求. 网站的架构是随着业务增长而演变的,而非一蹴而就. 具体还是需要根

Nginx的一些基本功能极速入门

本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理.废话不多,直接开始. 1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 配置: server { listen 80; # 端口号 location / { root /usr/share/nginx/html; # 静态文件路径 } } 2.反向代理服务器 什么是反向代理? 客户端本来可以直接通过HTTP协议访问某

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 &amp;&amp; Linux下的ZipArchive配置开启压缩

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipArchive;//新建一个ZipArchive的对象 /* 通过ZipArchive的对象处理zip文件 $zip->open这个方法的参数表示处理的

用python实现的百度音乐下载器-python-pyqt-改进版

之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt做的界面,在下载的过程中进行窗口操作,会出现UI阻塞的现象. 前两天有时间调整了一下,做了几方面的改进: 1.修改了UI界面阻塞的问题,下载的过程中可以进行其它的UI操作; 2.爬虫程序采用一个主线程,8个子线程的方式快速爬取,网络状况一致的情况下,将扫描100首歌曲的时间提高到了8.9秒左右:(本

基于nginx部署app下载服务器

今天,公司推出一款手游,但是需要部署一个下载服务器,为了让用户通过互联网访问,或者扫码下载!于是需部署app下载服务器: 环境:nginx已部署好,基于虚拟主机 直接添加个虚拟主机就可以了:配置文件如下 server {       listen       8085;        #端口       server_name  localhost;   #服务名       root    d:/web/;  #显示的根索引目录       autoindex on;