Как избежать повторной загрузки файлов в Python и flask_upload - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь запретить пользователям загружать дубликаты файлов 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
...