先取到上傳過來的文件對象
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 "上傳成功"
