2013-01-10 28 views
11

我在使用s3作爲媒體文件的django項目中使用sorl縮略圖時出現了一個非常奇怪的錯誤。我已經完成了我在此回答中指出的設置https://stackoverflow.com/a/12848650/538191,實際上我所有其他媒體文件都正在正確生成。與Django Sorl錯誤的網址與亞馬遜s3的縮略圖

但對於圖像通過SORL縮略圖生成我得到一個url像這樣

https://he-s3.s3.amazonaws.com/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg?Signature=tgDEXyRV3gl3QtK%2BvwliqAtWqpM%3D&Expires=1357853609&AWSAccessKeyId=AKIAJLE6MUHDYS3HN6YQ

這個問題很奇怪,因爲其附加的S3存儲路徑圖像的URL,但它不添加/媒體/之間。如果檢查

https://he-s3.s3.amazonaws.com/media/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg

圖像確實存在那裏,但由於正在生成的URL錯誤,我得到一個破碎的形象。在設置文件我已經使用s3boto宣佈DEFAULT_FILE_STORAGE,它包含

S3_URL = 'http://he-s3.s3-website-ap-southeast-1.amazonaws.com' 
MEDIA_URL = S3_URL + '/media/' 

我不明白爲什麼SORL縮略圖不包含媒體在這條小路。

任何幫助表示讚賞。

更新

而不是被解決,這個問題事實上已經加劇。我所做的是我用縮略圖清除了KVStore,並清除了所有數據庫。我很高興,因爲我認爲問題解決了,現在我正在獲得正確的網址。但後來我刷新了頁面,並且我又收到了錯誤的網址。我不明白髮生了什麼,如果我清除縮略圖數據庫,它會顯示正確的URL一次,然後再次顯示錯誤的網址。

+1

第一個是安全網址,首先確保設置AWS_S3_SECURE_URLS爲False,或者AWS_S3_CUSTOM_DOMAIN設置爲設置 –

+1

我也遇到類似的問題。如果您的DEFAULT_FILE_STORAGE設置爲S3,則可以保留MEDIA_URL ='/ media /'。 但添加AWS設置AWS_LOCATION ='/ media /'。 我認爲這將解決您的問題。 – chhantyal

回答

28

我敢打賭,你使用的是這樣的:

MediaS3BotoStorage = lambda: S3BotoStorage(location='media') 

然而,因爲它使用類名的序列化存儲類到緩存這導致SORL-縮略圖的問題。稍後當它反序列化時,它將實例化爲S3BotoStorage(),而不帶location參數。這就是爲什麼它第一次爲你工作,但後來失敗。

可以使用,而不是一個工廠一個全面的一流解決它:

class MediaS3BotoStorage(S3BotoStorage): 
    location = 'media' 

希望幫助!

+1

謝謝!拯救了我的一天! –

+1

非常感謝:) –

+0

如果在2017年與boto3 == 1.4.3有此問題,最好使用MediaRootS3BotoStorage。 –