2010-09-30 66 views
0

我想使用會話在Web應用程序中提供圖像,以便會話過期後到圖像的鏈接到期。確保Web應用程序中的動態圖像URL:使用BLOB存儲?

如果我顯示圖像的文件系統存儲的實際鏈接,比如說http://www.mywebapp.com/images/foo1.jpg,這很明顯會阻止將來對圖像的請求(用戶已經退出會話)停止。這就是爲什麼我正在考慮將圖像放在一個sqlite數據庫,並從那裏提供服務。

看來,使用數據庫的圖像存儲被認爲是不好的做法(雖然顯然GAE blob存儲似乎提供這種功能),所以我想弄清楚什麼替代方案將是。

1) 也許我做somesort的網址重寫,像這樣:使用Nginx的

http://www.mywebapp.com/images/[session_id]/foo1.jpg 思考,但似乎(在第一次看),這將需要一些hackin來完成?

2) 將文件複製到文件系統上的物理目錄,並在會話過期時刪除。這似乎相當凌亂,但?

是否有任何標準的方法來完成這個動態圖像url的東西?

我正在使用web.py - 如果有幫助。

非常感謝!

+0

圖片本身是否動態生成?當你說'會話'時,同一用戶是否需要多次下載相同的圖像?或者在每次請求後過期都可以接受? – AndrewF 2010-09-30 12:14:06

+0

atm圖像非常靜態 - 但我確實希望選項能夠在某個時刻使用用戶標識進行水印。我認爲在一次訪問後過期就可以了,因爲如果需要的話,我應該可以重新生成鏈接,但也許暫停可能是更好的解決方案? – malangi 2010-09-30 12:33:31

回答

1

爲什麼這麼複雜?

使用UUID作爲名稱,用戶提供的(即http://www.mywebapp.com/images/foo1.jpg

保存在一個目錄中的圖像的名義下即成影像。

在會話中爲文件名創建映射到UUID。

在處理程序/images/中查找地圖中的真實文件名。如果不存在這樣的條目,則返回404。否則提供圖像。

當會話關閉時,從地圖上刪除所有文件。

在cron作業中,刪除所有超過一天的圖像。

這樣,幾個用戶可以上傳相同的圖像(相同的名稱),圖像會盡快刪除或通過cron作業(如果服務器崩潰或類似的東西)刪除。

+0

哇。這似乎是一個更加優雅的解決方案 - 快速提問。雖然處理程序的映射 - 猜測這將是像http://wiki.nginx.org/HttpMapModule?我需要在python中生成地圖? – malangi 2010-09-30 17:59:54

+0

只需使用簡單的'dict'。 – 2010-10-01 16:01:01

-1

的你的兩個理念結合(複製到目錄,到期時,會話過期),可以推廣到每15分鐘創建一個新的目錄(可以像一個符號鏈接一樣簡單)。在生成新的符號鏈接時,現在也要刪除一個小時的符號鏈接。始終鏈接到代碼中的最新名稱。

相關問題