2012-04-20 38 views
3

我需要设置一个页面,让用户上传文件,用脚本修改文件,然后将文件提供给用户。在网页上存储一段时间的文件

我有上传和修改部分,但我不知道该把文件放在哪里。他们将在1或2mb的区域,并且我的网站托管计划的空间很小,所以我想尽快摆脱这些文件。没有理由让这些文件存在的时间超过用户在被重定向时被浏览器下载的选项。

是否只有通过cron作业来检查文件的创建时间并删除它们(如果它们是特定时间的)?

我正在使用python和PHP。

编辑:

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

+0

Python和PHP都可以实现这一点。你想要哪一个答案? – 2012-04-20 07:26:26

+0

@TheronLuhn,两者,如果你不介意的话。 – mowwwalker 2012-04-20 07:26:49

+0

@TheronLuhn,另外,这取决于。如果代码是在处理文件的脚本中进行的,那么优先选择Python,但是如果它是独立运行的脚本,那么PHP。无论哪种方式,我宁愿两个:D – mowwwalker 2012-04-20 07:27:32

回答

0

我不知道为什么我没有想到的,但我是在为Python的IRC,讨论一个完全无关的问题,有人问我为什么不只是提供文件。究竟!

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

0

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

编辑:这需要你改变下载文件的方式。例如参见starting file download with JavaScript

1

一般来说,你必须设置一个策略。该政策是for any uploaded file, the life time is 5 mins

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

但是有一种替代解决方案,长期来看效果更好。

建立一个队列。是。 Cron工作是要走的路,因为您必须考虑用户何时关闭FireFox。我们是否真的想编写一些JavaScript来检查用户是否关闭Firefox?我不知道该怎么做,因为我不是一个JavaScript家伙。可能不是很容易。但我们不想处理shell脚本或低级系统命令。用Python做到这一点?这意味着不要使用cron作业。

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

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

这些分布式任务队列会更理想的网络服务,如上传图片,修改,再投回来的网址。你不希望你的服务被阻止(如果转换需要1分钟怎么办)?如果你没有正确设置,你的服务器人(如apache或nginx)可能会在内部超时。你也不想让超时时间过长,否则会带来灾难。

通过任务队列,您现在可以扩展您的Web服务。这会让你未来的项目变得更好。

一些读数

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

job queue implementation for python

相关问题