我需要设置一个页面,让用户上传文件,用脚本修改文件,然后将文件提供给用户。
我有上传和修改部分,但我不知道把文件放在哪里。他们将在1或2mb的区域,我的网站主机计划空间很小,所以我想尽快摆脱这些文件。没有理由让文件存在的时间长于用户在重定向后可以通过浏览器下载选项。
这是使用cron作业检查文件创建时间的唯一方法,如果它们是特定年龄则删除它们吗?
我正在使用python和PHP。
编辑:
首先上传文件。然后将文件的位置发送回用户。页面上的javascript重定向到文件的路径。浏览器打开保存文件对话框,他们选择保存文件或取消。如果他们取消,我想立即删除该文件。如果他们选择保存文件,我想在下载完成后删除该文件。
答案 0 :(得分:1)
通常,您必须设置策略。该政策为for any uploaded file, the life time is 5 mins
。
Kniganapolke的解决方案很好,可能是最便宜和最容易实现的。如果您不想保留实际文件所在位置的信息(在服务器中,您不得向外界公开),则需要将其记录在数据库中。
但是有一种替代解决方案,从长远来看会更好。
排队。是。 Cron工作是要走的路,因为你必须考虑用户何时关闭FireFox。我们真的想写一些javascript来检查用户是否正在关闭Firefox吗?我不知道怎么做,因为我不是一个javascript的家伙。可能不是很容易。但我们不想处理shell脚本或低级系统命令。用Python做吗?这意味着不要使用cron job。
策略是,根据需要向队列中抛出许多内容。添加上传到队列,抛出返回(显示链接),然后抛出删除策略(检查当前时间是否超过5分钟),如果没有,则将相同的策略重新放入队列。
您需要一个任务队列,例如Celery(只是为了我的最爱之一)
这些分布式任务队列对于Web服务更为理想,例如上传图片,修改,然后返回网址。您不希望您的服务被阻止(如果转换需要1分钟,该怎么办)?如果没有正确设置,你的服务器人(比如apache或nginx)可能会在内部超时。你也不想让超时太长,否则会带来灾难。
使用任务队列,您现在可以扩展您的Web服务。这将使您的未来项目更好。
一些阅读
http://bitkickers.blogspot.com/2010/07/djangocelery-quickstart-or-how-i.html
答案 1 :(得分:0)
首先想到的是在JavaScript中设置超时并向服务器脚本发送AJAX请求以删除文件。
当用户离开或关闭页面时,我也会处理这种情况(在IE中它是onBeforeUnload事件)。
编辑:这需要您更改文件的下载方式。请参阅示例starting file download with JavaScript。
答案 2 :(得分:0)
我不知道为什么我没有想到它,但我在Python的IRC上,讨论了一个完全不相关的问题,有人问我为什么不只是提供文件。究竟!
我从不需要保存文件,只是用正确的标头将其发回给用户。问题解决了!