2021-12-03 17:33:02 +08:00
|
|
|
|
"""
|
|
|
|
|
Author : XinYi Song
|
|
|
|
|
Time : 2021/12/1 15:19
|
|
|
|
|
Desc:
|
|
|
|
|
"""
|
|
|
|
|
import socket
|
|
|
|
|
import sys
|
|
|
|
|
import re
|
|
|
|
|
import os
|
|
|
|
|
from hashlib import md5
|
|
|
|
|
|
|
|
|
|
from util.file_store_path import file_store_path_year, file_store_path_month, file_store_path_day
|
|
|
|
|
|
|
|
|
|
FILE_DIR = os.path.dirname(__file__)
|
|
|
|
|
|
|
|
|
|
# BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
|
|
|
|
# home = os.path.join(BASE_DIR, "/unstructured_data/remote_sensing_data")
|
|
|
|
|
home = "/unstructured_data/remote_sensing_data"
|
|
|
|
|
|
2021-12-03 17:59:26 +08:00
|
|
|
|
|
2021-12-03 17:33:02 +08:00
|
|
|
|
# 定义一个函数,计算进度条
|
|
|
|
|
def bar(num=1, sum=100):
|
|
|
|
|
rate = float(num) / float(sum)
|
|
|
|
|
rate_num = int(rate * 100)
|
|
|
|
|
temp = '\r%d %%' % (rate_num)
|
|
|
|
|
sys.stdout.write(temp)
|
|
|
|
|
|
2021-12-03 17:59:26 +08:00
|
|
|
|
|
2021-12-03 17:33:02 +08:00
|
|
|
|
def md5_file(name):
|
2021-12-03 17:59:26 +08:00
|
|
|
|
m = md5()
|
|
|
|
|
a_file = open(name, 'rb') # 需要使用二进制格式读取文件内容
|
|
|
|
|
m.update(a_file.read())
|
|
|
|
|
a_file.close()
|
|
|
|
|
return m.hexdigest()
|
2021-12-03 17:33:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def upload_file_client(file_path, depth, dateTime, collectionCode):
|
|
|
|
|
ck = socket.socket()
|
|
|
|
|
ck.connect(('192.168.2.9', 9002))
|
|
|
|
|
print(str(ck.recv(1024), encoding='utf-8'))
|
|
|
|
|
# inp = input('请输入(内容格式:post|文件路径 目标路径): \n >>> ').strip() # 输入内容格式:命令|文件路径 目标路径
|
|
|
|
|
# func, file_path = inp.split("|", 1) # 将输入的内容拆分为两部分,方法名和路径
|
|
|
|
|
# local_path, target_path = re.split("\s*", file_path, 1) #再将路径部分,通过正则表达式。以空格拆分为:文件路径和上传的目标路径
|
|
|
|
|
file_byte_size = os.stat(file_path).st_size # 获取文件的大小
|
|
|
|
|
file_name = os.path.basename(file_path) # 设置文件名
|
|
|
|
|
md5 = md5_file(file_path)
|
|
|
|
|
if depth == 'year':
|
|
|
|
|
file_paths = file_store_path_year(dateTime, home, collectionCode)
|
|
|
|
|
if depth == 'month':
|
|
|
|
|
file_paths = file_store_path_month(dateTime, home, collectionCode)
|
|
|
|
|
if depth == 'day':
|
|
|
|
|
file_paths = file_store_path_day(dateTime, home, collectionCode)
|
|
|
|
|
|
|
|
|
|
post_info = "post|%s|%s|%s|%s|%s" % (file_name, file_byte_size, collectionCode, dateTime, depth) # 将发送的内容进行拼接
|
|
|
|
|
ck.sendall(bytes(post_info, encoding='utf-8')) # 向服务器端发送内容
|
|
|
|
|
|
|
|
|
|
result_exist = str(ck.recv(1024), encoding='utf-8')
|
|
|
|
|
has_sent = 0
|
|
|
|
|
if result_exist == "2003":
|
|
|
|
|
ck.sendall(bytes("2004", encoding='utf-8'))
|
|
|
|
|
result_continue_pos = str(ck.recv(1024), encoding='utf-8') # 已经传输了多少的文件内容
|
|
|
|
|
print(result_continue_pos)
|
|
|
|
|
has_sent = int(result_continue_pos)
|
|
|
|
|
file_obj = open(file_path, 'rb') # 对文件进行读操作
|
|
|
|
|
file_obj.seek(has_sent) # 调整指针
|
|
|
|
|
|
|
|
|
|
while has_sent < file_byte_size:
|
|
|
|
|
data = file_obj.read(1024)
|
|
|
|
|
ck.sendall(data)
|
|
|
|
|
has_sent += len(data)
|
|
|
|
|
bar(has_sent, file_byte_size) # 进度条
|
|
|
|
|
|
|
|
|
|
file_obj.close()
|
|
|
|
|
print("文件上传成功!")
|
2021-12-03 17:59:26 +08:00
|
|
|
|
uc = {'file_size': file_byte_size, 'fileName': file_name, 'md5': md5, 'file_path': file_paths + '/' + file_name,
|
|
|
|
|
'type': 'ok'}
|
2021-12-03 17:33:02 +08:00
|
|
|
|
return uc
|