Поврежденный PDF при сохранении в базу данных более 50 КБ - PullRequest
1 голос
/ 02 июля 2019

У меня есть веб-страница, на которой пользователь может загрузить файл PDF и отправить его с помощью AJAX в мое приложение Flask.Вот код ajax:

var formData = new FormData();
formData.append('attachment', document.getElementById("attachment").files[0]);
$.ajax({
    type: 'POST',
    url: 'process_award_storage',
    contentType: false,
    processData: false,
    data: formData
})

Я не думаю, что это имеет какие-либо проблемы, потому что я могу распечатать содержимое и заголовок файла в коде Python.Тогда моя модель колбы определяется как таковая, используя LargeBinary для вложения в PDF:

class AwardStore(db.Model):
    __tablename__ = 'awards_store'
    id = db.Column(db.Integer, primary_key=True)
    ...
    file = db.Column(db.LargeBinary, nullable=True) #I am sure this is the right file type for PDF saving

Наконец, вот как файл AJAX сохраняется в базе данных:

     award = AwardStore(name=name, file=request.files['attachment'].read())
     db.session.add(award)
     db.session.commit()

Я могупосмотрите, используя MySQL Workbench, что он сохранен.Однако, когда я пытаюсь загрузить оттуда BLOB-файл на рабочий стол и открыть его, появляется сообщение «Не удалось загрузить документ PDF».То же самое происходит, когда я использую колбу send_file.Кажется, я сделал все, как я видел в Интернете, но что-то не так.

Может быть, эти предупреждения связаны?:

C:\Users\msolonko\Desktop\NICKFI~1\CACHTM~1\APP_DE~1\virt\lib\site-packages\pymysql\cursors.py:170: Warning: (1300, "Invalid utf8 character string: 'C4E5F2'")
  result = self._query(query)
C:\Users\msolonko\Desktop\NICKFI~1\CACHTM~1\APP_DE~1\virt\lib\site-packages\pymysql\cursors.py:170: Warning: (1265, "Data truncated for column 'file' at row 1")
  result = self._query(query)

Я пытался их погуглить и ничего не нашел.Я ценю любую помощь.

РЕДАКТИРОВАТЬ:

Я заметил, что небольшие файлы, как правило, загружаются и отображаются правильно.Проблема связана с файлами размером> ~ 50 КБ.База данных, которую я использую AWS RDS. Можно ли где-то изменить настройку, чтобы включить большие размеры?

1 Ответ

1 голос
/ 10 июля 2019

LargeBinary также принимает поле длины. который преобразуется в BLOB-объект mysql, длина которого по умолчанию составляет 65535 байт (64 КБ). Попробуйте увеличить длину и установите

MEDIUMBLOB для 16777215 байт (16 МБ)

LONGBLOB для 4294967295 байт (4 ГБ).

Надеюсь, это поможет

...