我已经为这个问题挣扎了一段时间,但似乎找不到解决方案。情况是,我需要在浏览器中打开一个文件,在用户关闭文件后,该文件将从他们的机器中删除。我所拥有的只是该文件的二进制数据。如果重要的话,二进制数据来自使用download_as_string
方法的Google Storage。
经过一些研究,我发现tempfile
模块可以满足我的需求,但我无法在浏览器中打开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))
当这个程序运行时,我的计算机会给我一个错误,说文件是空的,所以无法打开。我在Mac上,如果相关的话,我正在使用Chrome。
您可以尝试使用临时目录:
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)
这在Mac操作系统上对我有效。