Сохраните файл PDF в моей базе данных MongoDB с ошибкой PYmongo - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу сохранить файл PDF в моей базе данных MongoDB (в Ubuntu) с помощью PYMonbgo и gridfs. Но я получаю сообщение об ошибке кодек 'utf-8' не может декодировать байт 0xe2 в позиции 10: недопустимый байт продолжения

Как я могу сохранить и получитьPDF с питоном в MongoDB?

from pymongo import MongoClient
import gridfs

db = MongoClient('mongodb://localhost:27017/').myDB
fs = gridfs.GridFS( db )
fileID = fs.put( open(('Test.pdf')  ))
out = fs.get(fileID)

1 Ответ

1 голос
/ 30 сентября 2019

Вам необходимо правильно кодировать PDF после прочтения. Я не буду притворяться, что понимаю детали. Но я получил это на работу. Попробуйте, посмотрите, работает ли он и у вас. (К вашему сведению, возможно, вы также хотите указать коллекцию)

import base64
import gridfs

def write_new_pdf(path):
    db = MongoClient('mongodb://localhost:27017/').myDB
    fs = gridfs.GridFS(db)
    # Note, open with the "rb" flag for "read bytes"
    with open(path, "rb") as f:
        encoded_string = base64.b64encode(f.read())
    with fs.new_file(
        chunkSize=800000,
        filename=path) as fp:
        fp.write(encoded_string)

Обновление: как читать PDF обратно

def read_pdf(filename):
    # Usual setup
    db = MongoClient('mongodb://localhost:27017/').myDB
    fs = gridfs.GridFS(db)
    # Standard query to Mongo
    data = fs.find_one(filter=dict(filename=filename))
    with open(filename, "wb") as f:
        f.write(base64.b64decode(data.read()))
...