zoukankan      html  css  js  c++  java
  • 解压压缩包并放到指定路径

    先取到上传过来的文件对象

    if request.method == "GET":
        return render_template('upload.html')
    from werkzeug.datastructures import FileStorage
    file_obj = request.files.get('code') 

    1、我们只接收zip压缩包。

    name_ext = file_obj.filename.rsplit('.',maxsplit=1)
    if len(name_ext) != 2:
        return "请上传zip压缩文件"
    if name_ext[1] != 'zip':
        return "请上传zip压缩文件"
    

    2. 接收用户上传文件,并写入到服务器本地。

    file_path = os.path.join("files",file_obj.filename)
        # 从file_obj.stream中读取内容,写入到文件
    file_obj.save(file_path)
    

    3. 解压zip文件。

    import shutil
        # 通过open打开压缩文件,读取内容再进行解压。
    shutil._unpack_zipfile(file_path,'xsadfasdfasdf')  

    结果我们发现这样的话我们接收一遍上传过来的压缩包,又保存一份解压过的文件夹,太占内存,我们可以先接收上传过来的压缩包,然后进行解压,最后保存到指定路径。更省事。

    # 2+3, 接收用户上传文件,并解压到指定目录
    import shutil
    target_path = os.path.join('files',str(uuid.uuid4()))  #为了防止重名,文件覆盖,设置随机字符串
    shutil._unpack_zipfile(file_obj.stream,target_path)   #解压文件
    

    4. 遍历某目录下的所有文件。

    # 4、遍历目录下的所有文件
        total_num=0
        for base_path,folder_list,file_list in os.walk(target_path):
            for file_name in file_list:
                file_path=os.path.join(base_path,file_name)
                file_ext=file_path.rsplit(".",maxsplit=1)
                if len(file_ext)!=2:
                    continue
                if file_ext[1]!="py":
                    continue
                file_num=0
                with open(file_path,"rb") as f:
                    for line in f:
                        line=line.strip()
                        if not line:  #空行
                            continue
                        if line.startswith(b"#"):
                            continue
                        file_num+=1
                total_num+=file_num
    
        #获取当前时间
        import datetime
        ctime=datetime.date.today()
        print(total_num,ctime,session["user_info"]["user_id"])
    
        data=helper.fetch_one("select id from coderecord where date=%s and uid=%s",(ctime,session['user_info']['user_id']))
        print(data)
        if data:
            return "今天已经上传"
    
        helper.insert("insert into coderecord(row,date,uid)values(%s,%s,%s)",
                      (total_num, ctime, session['user_info']['user_id']))
    
        return "上传成功"

    总体代码

    def upload():
        if request.method=="GET":
            return render_template("upload.html")
    
        file_obj=request.files.get("upload_file")
        #1、检查上传文件后缀名
        next_ext=file_obj.filename.rsplit(".",maxsplit=1)
        if len(next_ext)!=2:
            return "请上传zip压缩文件"
        if next_ext[1]!="zip":
            return "请上传zip文件"
        #2、接收用户上传文件,并解压到指定目录
        target_path=os.path.join("upload_files",str(uuid.uuid4())) #防止重名,设置随机字符串
        shutil._unpack_zipfile(file_obj.stream,target_path) #压缩文件
        # 4、遍历目录下的所有文件
        total_num=0
        for base_path,folder_list,file_list in os.walk(target_path):
            for file_name in file_list:
                file_path=os.path.join(base_path,file_name)
                file_ext=file_path.rsplit(".",maxsplit=1)
                if len(file_ext)!=2:  #没有后缀
                    continue
                if file_ext[1]!="py":  #py文件
                    continue
                file_num=0
                with open(file_path,"rb") as f:
                    for line in f:
                        line=line.strip()
                        if not line:  #空行
                            continue
                        if line.startswith(b"#"): #注释
                            continue
                        file_num+=1
                total_num+=file_num
    
        #获取当前时间
        import datetime
        ctime=datetime.date.today()
        print(total_num,ctime,session["user_info"]["user_id"])
    
        data=helper.fetch_one("select id from coderecord where date=%s and uid=%s",(ctime,session['user_info']['user_id']))
        print(data)
        if data:
            return "今天已经上传"
    
        helper.insert("insert into coderecord(row,date,uid)values(%s,%s,%s)",  #数据库插入数据
                      (total_num, ctime, session['user_info']['user_id']))
    
        return "上传成功"
    

      

      

      

     

      

  • 相关阅读:
    Oracle 获取表结构信息
    EasyUI layout动态设置Split属性
    jquery easyui-datagrid 如何清空数据
    ORacle 复制表
    aspx调用webmethod
    RDLC添加链接
    Nginx 负载均衡 ip_hash , hash key(consistent) url_hash, least_conn
    Nginx 提升吞吐量利器 Keeplived
    Nginx Gzip 的正确使用
    Nginx 切割日志
  • 原文地址:https://www.cnblogs.com/gaoya666/p/9201043.html
Copyright © 2011-2022 走看看