#python #flask #python-requests #chunks
#python #flask #python-запросы #фрагменты
Вопрос:
Я загружаю файлы как так:
...
for filename in os.listdir(directory):
path = os.path.join(directory, filename)
file = open(path, 'rb')
print(f'file check SENDER sum of {filename}:')
print(hashlib.md5(file.read()).hexdigest())
files = {'file': file}
response = requests.post(f'{url}/file', files=files)
file.close()
assert(response.status_code == 200)
time.sleep(1)
выводит:
file check SENDER sum of sample.tar_4.gz:
ea8273eb50b5b38b5d645862c52f7790
file check SENDER sum of sample.tar_1.gz:
0167aed09f2b2d3704acdc22a93c677c
file check SENDER sum of fs_manifest.csv:
4f179c42200f4fbabeb571922c4096f0
file check SENDER sum of sample.tar_5.gz:
9375178fb5d6d249764d2fffd8be9424
file check SENDER sum of sample.tar_2.gz:
e668fde4a05c8b76ae632c58c36f7eef
file check SENDER sum of sample.tar_3.gz:
3f951beb1bbef05f4bb3f642e7e4849d
и на принимающей стороне в Flask следующим образом:
@app.route('/file', methods=['POST'])
def post_file():
""" Upload chunks; instruct merge operation """
if request.method == 'POST':
file = request.files['file']
filename = secure_filename(file.filename)
file.save(os.path.join(EXTRACTED_DIR_TEMP, filename))
print(f'file check sum RECEIVER of {filename}:')
print(hashlib.md5(file.read()).hexdigest())
в результате получается идентичная контрольная сумма, которая не соответствует ни одному из оригиналов:
file check sum RECEIVER of sample.tar_4.gz:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:47] "POST /file HTTP/1.1" 200 -
file check sum RECEIVER of sample.tar_1.gz:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:48] "POST /file HTTP/1.1" 200 -
file check sum RECEIVER of fs_manifest.csv:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:49] "POST /file HTTP/1.1" 200 -
file check sum RECEIVER of sample.tar_5.gz:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:50] "POST /file HTTP/1.1" 200 -
file check sum RECEIVER of sample.tar_2.gz:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:51] "POST /file HTTP/1.1" 200 -
file check sum RECEIVER of sample.tar_3.gz:
d41d8cd98f00b204e9800998ecf8427e
127.0.0.1 - - [09/Jan/2021 01:39:52] "POST /file HTTP/1.1" 200 -
Правильно ли я считываю контрольные суммы при получении?
В фактической реализации каталог содержит фрагментированные файлы из FileSplit. Контрольные суммы должны совпадать, ищите предложения, пожалуйста.
Ответ №1:
d41d8cd98f00b204e9800998ecf8427e соответствует b''
, заметил, что клиент отправлял b''
! file.read()
выполняется один раз.
# client
read = base64.b64encode(file.read())
files = {'file': read}
response = requests.post(f'{url}/file', files=files)