Я пытаюсь запретить пользователям загружать дубликаты файлов PDF. Для этого я добавляю поле file_hash
, содержащее файл SHA-256 га sh.
routes.py
:
pdf_hash = compute_sha256_of_file(form.pdf_file.data)
print('routes.py:', form.pdf_file.data, pdf_hash)
forms.py
:
def validate(self):
pdf_file_hash = compute_sha256_of_file(self.pdf_file.data)
print('forms.py:', self.pdf_file.data, pdf_file_hash)
common.py
:
def compute_sha256_of_file(obj_file):
if not obj_file:
return False
pdffile = obj_file
filemd5 = hashlib.sha256(pdffile.read())
return filemd5.hexdigest()
Оба метода вызывают common.compute_sha256_of_file()
для получения SHA-256 га sh.
Когда я показываю вычисленные хэши, я получаю:
forms.py: <FileStorage: 'SENAE-DNR-2017-0154-OF.pdf' ('application/pdf')> f796b1b464b284a0e6578299fed456786864c1ff33edfbbdbb8322129c9d6755
routes.py: <FileStorage: 'SENAE-DNR-2017-0154-OF.pdf' ('application/pdf')> e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Чем отличаются хэши?
В чем разница между:
routes.py: form.pdf_file.data
forms.py: self.pdf_file.data
models.py
:
pdf_hash = db.Column(db.String(150), unique=True)
Во время выполнения я получаю сообщение об ошибке:
sqlalchemy.exc.IntegrityError
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: trades.pdf_hash