确保web-app中的动态图片网址:使用blob商店?

时间:2010-09-30 11:59:18

标签: python sqlite web-applications nginx blob

我想使用会话在网络应用中提供图片,以便会话过期后指向图片的链接过期。

如果我显示图像的文件系统存储的实际链接,请说http://www.mywebapp.com/images/foo1.jpg这显然使得停止将来对图像的请求(用户已经退出会话的一个)很难停止。这就是我考虑将图像放在sqlite数据库中并从那里提供服务的原因。

似乎使用db进行图像存储被认为是不好的做法(虽然显然GAE blob存储似乎提供了这种功能),所以我试图弄清楚替代方案会是什么。

1) 也许我做了一些像这样的网址重写:

http://www.mywebapp.com/images/[session_id]/foo1.jpg 考虑使用nginx,但似乎(首先看)这需要一些hackin来完成?

2) 将文件复制到文件系统上的物理目录,并在会话过期时删除。这看起来很乱?

是否有任何标准方法可以完成此动态图片网址?

我正在使用web.py - 如果有帮助的话。

非常感谢!

3 个答案:

答案 0 :(得分:2)

lighty的mod_secdownload对我解决这个问题很有帮助。您可以在http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

了解更多相关信息

lighttpd wiki还有一篇关于你的问题的通用文章:http://redmine.lighttpd.net/wiki/1/HowToFightDeepLinking

答案 1 :(得分:1)

为什么这么复杂?

以用户提供的名称(即http://www.mywebapp.com/images/foo1.jpg

提供图像

使用UUID作为名称将图像保存在目录中。

在会话中为UUID创建文件名映射。

/images/的处理程序中查找地图中的真实文件名。如果不存在此类条目则返回404。否则为图像服务。

会话结束后,删除地图中的所有文件。

在cron作业中,删除所有超过一天的图像。

这样,一些用户可以上传相同的图像(同名),图像会被尽快删除或者被cron作业删除(如果服务器崩溃或类似的话)。

答案 2 :(得分:-1)

您的两个想法(复制到目录,会话到期时到期)的组合可以推广到每15分钟创建一个新目录(可能像符号链接一样简单)。生成新的符号链接时,也要删除现在一小时的符号链接。始终链接到代码中的最新名称。