Создание представления в браузере с помощью python - PullRequest
0 голосов
/ 11 июля 2020

Я борюсь с этой проблемой какое-то время, но не могу найти ее решения. Ситуация такова, что мне нужно открыть файл в браузере, и после того, как пользователь закрывает файл, файл удаляется с его машины. Все, что у меня есть, - это двоичные данные для этого файла. Если это важно, двоичные данные поступают из Google Storage с использованием метода download_as_string.

Проведя небольшое исследование, я обнаружил, что модуль tempfile подходит для моих нужд, но я не могу получить временный файл в открыть в браузере, потому что файл существует только в памяти, а не на диске. Есть предложения, как решить эту проблему?

Пока это мой код:

import tempfile
import webbrowser

# grabbing binary data earlier on

temp = tempfile.NamedTemporaryFile()

temp.name = "example.pdf"
temp.write(binary_data_obj)
temp.close()

webbrowser.open('file://' + os.path.realpath(temp.name))

При его запуске мой компьютер выдает ошибку, в которой говорится, что файл не может быть открыт, так как он пуст. Я использую Ma c и использую Chrome, если это уместно.

1 Ответ

1 голос
/ 11 июля 2020

Вместо этого вы можете попробовать использовать временный каталог:

import os
import tempfile
import webbrowser

# I used an existing pdf I had laying around as sample data
with open('c.pdf', 'rb') as fh:
    data = fh.read()

# Gives a temporary directory you have write permissions to.
# The directory and files within will be deleted when the with context exits.
with tempfile.TemporaryDirectory() as temp_dir:

    temp_file_path = os.path.join(temp_dir, 'example.pdf')

    # write a normal file within the temp directory
    with open(temp_file_path, 'wb+') as fh:
        fh.write(data)

    webbrowser.open('file://' + temp_file_path)

Это сработало для меня на Ma c OS.

...