我有一個Django應用程序,它使用FileSystemStorage進行開發,使用S3BotoStorage進行分期和生產。一切工作正常。有跡象表明,我已經注意到了這些系統之間的一些小的差異:Django存儲系統的差異
FileSystemStorage將追加MEDIA_ROOT值,它 保存的任何文件。 S3BotoStorage默認不會。
如果我刪除了的FileField模型實例,S3BotoStorage將 刪除的FileField的文件,該文件所在的目錄,如果 文件在該目錄中的唯一文件。 FileSystemStorage不會刪除空目錄 。
我可以解決這些差異,但它們會爲我的代碼添加條件。第一個是最簡單的 - 我只用location=MEDIA_ROOT
初始化S3BotoStorage類。有沒有辦法以類似的方式處理第二個?我可以配置存儲類的目錄刪除行爲嗎?我應該重寫FileSystemStorage的刪除方法嗎?
S3BotoStorage根本不會「刪除文件夾」;實際上S3甚至沒有文件夾。相反,S3通過密鑰存儲所有數據。因爲S3Boto模擬一個普通的文件存儲,它使用諸如「foo/bar/baz.txt」之類的鍵,但它可以很容易地使用「foo; bar | baz.text」,並且S3不會閃爍。無論如何,如果你有兩個帶有「foo/bar」和「foo/baz」鍵的文件,大多數S3工具都會在文件夾「foo」中顯示文件「bar」和「baz」,但實際上它們是兩個單獨的密鑰。如果你刪除了兩個鍵,你的工具將使它看起來像一個文件夾被刪除,但實際上它從來沒有開始。 – machineghost
感謝您的評論。這在你的解釋後顯得很明顯 - 謝謝! – Erik