最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【调研】考虑用Python的临时文件实现保存临时文件且过期自动删除

Python crifan 3428浏览 0评论

折腾:

【已解决】Flask中如何保存临时文件且可以指定有效期

期间,想要实现:

保存临时文件,且能设置有效期,过期自动删除的效果

现在去研究,是否可以用临时文件的方式去实现

flask save data to tmp file

10.6. tempfile — Generate temporary files and directories — Python 2.7.15 documentation

好像是可以利用python中的tempfile去实现:

把mp3音频,保存到临时文件中

-》可以供外部访问?

但是好像不太好解决:

临时文件的有效期问题,和路径的问题

好像可以把api设计成:

file/tmp/tmpFileId/tmpFileName

的形式

然后再去根据tmpFileId去:

  • 如果能找到的话:去tempfile返回对应的文件:

  • 如果找不到,返回错误

python – Saving temporary file for plotting audio waveform – Code Review Stack Exchange

而对于临时文件的话:

  • 是否是需要自己去控制和删除掉?

    • 如果是的话,那么就麻烦了

    • 因为暂时没有合适的时机去触发而删除掉某个临时文件

  • 还是系统自动会清理掉临时文件?

    • 如果是的话,那就简单了

    • 就不用自己去考虑什么临时文件的有效期了,系统如果清理掉就清理掉,算了,无所谓,可以重新生成

flask 如何保存临时文件 有效期

flask save temporary file

[求助] Flask 如何实现 ajax 提交数据,后端生成 csv 文件并显示文件下载 – V2EX

好像可以:

保存在某个服务器的路径下

但是Flask新建一个延时任务,然后比如10分钟后,调用这个延时任务,去删除掉之前保存的文件?

文件上传时$_FILES[‘XX’][‘tmp_name’]临时文件的有效期求解?-php教程_HTMLDIVCSS-教育学习资源网

flask中上传 保存文件 – CSDN博客

python – Using tempfile to create pdf/xls documents in flask – Stack Overflow

“Use tempfile.mkstemp() which will create a standard temp file on disk which will persist until removed:”

好像是系统会帮忙自动维护,抽空垃圾回收会去删除?

Uploading Files — Flask 0.12.4 documentation

python – Read file data without saving it in Flask – Stack Overflow

python tempfile 保存期限

11.6. tempfile —生成临时文件和目录 – Python文档 – RD文档

Python模块学习:tempfile 临时文件(夹)操作 – Python – 伯乐在线

“tempfile.TemporaryFile([mode=’w+b'[, bufsize=-1[, suffix=”[, prefix=’tmp'[, dir=None]]]]])

该函数返回一个 类文件 对象(file-like)用于临时数据保存(实际上对应磁盘上的一个临时文件)。当文件对象被close或者被del的时候,临时文件将从磁盘上删除。”

但是我此处返回的临时文件后,并没有合适的时机去close

-》难道是rest api在返回之前

比如 open的作用域结束后,就返回了?

那岂不是rest api返回后,就没有了此文件了?

通过:

11.6. tempfile —生成临时文件和目录 – Python文档 – RD文档

“# create a temporary file using a context manager

>>> with tempfile.TemporaryFile() as fp:

…     fp.write(b’Hello world!’)

…     fp.seek(0)

…     fp.read()

b’Hello world!’

>>>

# file is now closed and removed”

果然是的。。。

https://docs.python.org/2/library/tempfile.html

“tempfile.NamedTemporaryFile([mode=’w+b'[, bufsize=-1[, suffix=”[, prefix=’tmp'[, dir=None[, delete=True]]]]]])¶

If delete is true (the default), the file is deleted as soon as it is closed.”

那就设置delete=False

至少可以暂时返回临时文件了。

Python模块学习——tempfile – Jack.gao – 博客园

5.19 创建临时文件和文件夹 — python3-cookbook 3.0.0 文档

python – 从tempfile创建和读取 – 代码日志

tempfile要是支持临时文件带个有效期就好了,过了有效期自动删除

使用 Python 进行稳定可靠的文件操作 – 技术翻译 – 开源中国社区

【总结】

现在看下来貌似是:

对于此处CentOS的服务器,属于Unix/Linux

然后用

tempfile.NamedTemporaryFile(name=uniqueFileId, delete=False)

从而使得:

后续通过文件名(实际上是uuid之类的,防止重复的值)

然后(紧接着)继续访问返回到这个文件

而对于指定了delete为False,会不会导致:

存在于临时文件夹?中的临时文件,会大量积压,不会自动删除?

那Linux系统应该会去删除的才对。

但是,其实存在一个小风险:

创建了临时文件后,

紧接着系统,由于发现临时文件夹内容太多了或者其他原因,而对临时文件夹做了清理,导致刚刚创建对文件被删除了

这样后续rest api去访问文件,也是会找不到的

也是属于小bug

所以,为了方案更加健壮,还是暂时不考虑这个逻辑上有瑕疵的方案吧。

转载请注明:在路上 » 【调研】考虑用Python的临时文件实现保存临时文件且过期自动删除

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.175 seconds, using 22.07MB memory