2010-09-02 107 views
13

我想將文件上傳到仍在我的django項目中,但在我的MEDIA_ROOT路徑中的路徑。Django上傳文件不在MEDIA_ROOT路徑中給我SuspiciciousOperation錯誤

當我嘗試這樣做時,我得到一個SuspiciousOperation錯誤。

下面是在我的設置文件中定義的路徑:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'static_serve') 
UPLOAD_DIR = os.path.join(os.path.dirname(__file__), 'uploads') 

我這樣做,因爲我不希望我上傳是通過瀏覽器訪問的文件和我的MEDIA_ROOT路徑。

有沒有人有任何想法如何解決(修復)這個錯誤。

+0

您可以禁止網絡服務器公開提供某個導演ies在MEDIA_ROOT下。 – 2010-09-02 23:20:31

+0

我現在正在使用測試服務器...在Windows XP上。我也不確定如何做到這一點。 – imns 2010-09-02 23:25:43

+0

我不認爲開發服務器可以,但任何生產就緒的Web服務器都應該能夠限制對這些文件的訪問。例如,[這裏](http://httpd.apache.org/docs/2.0/misc/security_tips.html#protectserverfiles)是Apache的做法。 – 2010-09-02 23:29:40

回答

27

there is a way

從文檔:

例如,將 商店上傳的文件下 /媒體/照片,無論你的 MEDIA_ROOT設置的下面的代碼是:

from django.db import models 
from django.core.files.storage import FileSystemStorage 

fs = FileSystemStorage(location='/media/photos') 

class Car(models.Model): 
    ... 
    photo = models.ImageField(storage=fs) 
+1

+1這值得了解。太糟糕OP將不會投票這個最好的答案。 – hughdbrown 2010-09-22 21:28:25

+0

我有同樣的問題。是否你(和文檔)說,我得到以下例外'FileFields需要一個「upload_to」屬性.'我粘貼整個塊在這裏:http://dpaste.com/hold/533577/任何想法? – xpanta 2011-04-19 14:22:07

+1

只需將upload_to添加爲與位置相同的值即可。 – Tom 2011-08-31 19:28:28