嗯,有點grepping代碼周圍表明,有可能是得到了沿途均勻更深的錯誤消息。
在Django /核心/文件/ storage.py,線210
(這是1.1.1),我們有:
def path(self, name):
try:
path = safe_join(self.location, name)
except ValueError:
raise SuspiciousOperation("Attempted access to '%s' denied." % name)
return smart_str(os.path.normpath(path))
所以錯誤必須要走出safe_join的()。
在django/utils/_os.py中,我們有以下內容。注意它拋出的倒數第三行ValueError異常:
===========================
def safe_join(base, *paths):
"""
Joins one or more path components to the base path component intelligently.
Returns a normalized, absolute version of the final path.
The final path must be located inside of the base path component (otherwise
a ValueError is raised).
"""
# We need to use normcase to ensure we don't false-negative on case
# insensitive operating systems (like Windows).
base = force_unicode(base)
paths = [force_unicode(p) for p in paths]
final_path = normcase(abspathu(join(base, *paths)))
base_path = normcase(abspathu(base))
base_path_len = len(base_path)
# Ensure final_path starts with base_path and that the next character after
# the final path is os.sep (or nothing, in which case final_path must be
# equal to base_path).
if not final_path.startswith(base_path) \
or final_path[base_path_len:base_path_len+1] not in ('', sep):
raise ValueError('the joined path is located outside of the base path'
' component')
return final_path
==================
嗯,「加入的路徑位於基本路徑組件的外部」。現在在那裏有幾個對abspathu()的調用(它定義在該例程的上方,對於NT而言與其他操作系統不同)。 abspathu()通過添加os.cwdu()(當前工作目錄)將所有非絕對路徑轉換爲絕對路徑。
問題:任何機會,你有任何符號鏈接(符號鏈接)到您的媒體目錄?換句話說,它不是項目目錄的直接子項?我不知道這是否是一個有效的問題,它只是從我的腦海中跳出來。
問題:什麼是值self.location
和name
被傳遞給safe_join()?
野驢猜:是self.location
空?
另一個瘋狂的猜測:MEDIA_ROOT莫名其妙地變成/media/
?
如果你已經安裝了自己的Django副本(這並不難),試着在這些例程中添加一些打印語句,然後將其作爲開發服務器運行。打印輸出將轉到控制檯。
更新:嗯。你說「2)self.location和name的值是:/ home/tsoporan/site/media和/media/albums/anthem-for-the-underdog/30103635.jpg」
以下路徑任何意義?
"/home/tsoporan/site/media/media/albums/anthem-for-the-underdog"
請注意.../media/media/...在那裏。
另外,這是什麼操作系統? Django rev?
你是如何提供靜態文件嗎?你使用什麼URL來處理靜態文件。 – czarchaic 2009-12-23 01:11:31
通過Apache的服務的ProxyPass nginx的靜態文件: 像: 的ProxyPass /媒體的http://本地主機:5000/ ProxyPassReverse /媒體的http://本地主機:5000/ – tsoporan 2009-12-23 01:22:38
編輯:以上的評論被剝奪請參閱http:/ /dpaste.com/hold/136840/ – tsoporan 2009-12-23 01:24:54