3

我需要设置一个页面,让用户上传文件,使用脚本修改文件,然后将文件返回给用户。

我有上传和修改部分,但我不知道把文件放在哪里。它们将在 1 或 2mb 的区域内,而我的虚拟主机计划空间很小,所以我想尽快摆脱这些文件。没有理由让用户在被重定向后可以选择通过浏览器下载这些文件。

使用cron作业检查文件的创建时间并在它们达到一定年龄时将其删除的唯一方法是吗?

我正在使用 python 和 PHP。

编辑:

首先上传文件。然后将文件的位置发送回给用户。页面上的 javascript 重定向到文件的路径。浏览器打开保存文件对话框,他们选择保存文件或取消。如果他们取消,我想立即删除该文件。如果他们选择保存文件,我想在他们下载完成后删除文件。

4

3 回答 3

1

通常,您必须设置策略。政策是for any uploaded file, the life time is 5 mins

Kniganapolke 的解决方案很好,可能是最便宜和最容易实施的。如果您不喜欢保留实际文件所在位置的信息(在您的服务器中,您不得向外界公开),您需要将其记录在您的数据库中。

但是有一个替代解决方案,从长远来看会更好。

排个队。是的。Cron 作业是要走的路,因为您必须考虑用户何时关闭 FireFox。我们真的要编写一些 javascript 来检查用户是否正在关闭 Firefox 吗?我不知道该怎么做,因为我不是 javascript 人。恐怕真的不容易。但我们不想处理 shell 脚本或低级系统命令。用 Python 做吗?这意味着不要使用 cron 作业。

策略是,根据需要将尽可能多的东西放入队列中。将上传添加到队列中,抛出返回(显示链接),然后抛出删除策略(检查当前时间是否超过 5 分钟),如果不是,则将相同的策略返回到队列中。

您想要一个任务队列,例如Celery(仅举一个我的最爱)

这些分布式任务队列对于上传图片、修改然后返回 url 等 Web 服务会更理想。您不希望您的服务被阻塞(如果转换需要 1 分钟怎么办)?如果您没有正确设置,您的服务器人员(例如 apache 或 nginx)可能会在内部超时。你也不要让超时时间过长,否则会带来灾难。

使用任务队列,您现在可以扩展您的 Web 服务。这将使您未来的项目变得更好。

一些读数

http://bitkickers.blogspot.com/2010/07/djangocelery-quickstart-or-how-i.html

python的作业队列实现

于 2012-04-20T08:22:54.983 回答
0

首先想到的是在 JavaScript 中设置超时并向您的服务器脚本发送 AJAX 请求以删除文件。
当用户离开或关闭页面时,我也会处理这种情况(在 IE 中是 onBeforeUnload 事件)。

编辑:这需要您更改文件的下载方式。例如,请参阅使用 JavaScript 开始文件下载

于 2012-04-20T07:54:11.877 回答
0

我不知道为什么我没有想到它,但我在 IRC for Python 上讨论了一个完全不相关的问题,有人问我为什么不只是提供文件。确切地!

我从不需要保存文件,只需将其发送回具有正确标题的用户即可。问题解决了!

于 2012-04-22T08:49:59.263 回答