2017-09-20 152 views
1

我想在django管理界面上傳圖片。在開發過程中,一切正常,但是當我把文件放到我的服務器上時,它不起作用。 我在我的服務器上有兩個不同的路徑。一個我把所有的源文件和一個放置所有靜態文件的地方。Django上傳圖片

源文件

路徑:/htdocs/files/project/

路徑靜態文件:/htdocs/html/project/

如果我上傳一個圖片,然後將其保存在/htdocs/files/project/media/。但我想保存在/htdocs/html/project/。我如何改變路徑?

這裏是我的設置:

STATIC_URL = '/static/' 

MEDIA_URL = '/media/' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
    '/var/www/ssd1257/htdocs/html/' 
) 

這裏是我的模型:

class News(models.Model): 
    title = models.CharField(max_length=200, null=False) 
    date = models.DateField(null=False, default=datetime.now) 
    text = models.TextField(null=False, blank=True) 
    image = models.ImageField(upload_to="./news/") 

回答

0

上傳的文件通常在模型類,你的情況保存在指定的以下路徑 MEDIA_URL +路徑「upload_to」屬性

所以, MEDIA_ROOT = os.path.join(BASE_DIR ,'media')=「/ htdocs/files/project/media」 Django將創建路徑,如果它不存在

但是我沒有得到'upload_to'的點in-frontront路徑「./news/」)

所以如果你想要t Ø改變,其中上傳的文件的存儲路徑,簡單地改變MEDIA_ROOT 注意,請提供絕對完整路徑

我想這將是 MEDIA_ROOT =「/無功/網絡/ ssd1257/htdocs中/ HTML /項目」

此外,它的更好的保存,以避免FILE_NAME之前上傳的文件重命名衝突

def get_news_image_path(instance, filename): 
    path_first_component = ‘news/‘ 
    ext = filename.split('.')[-1] 
    timestamp = millis = int(round(time.time() * 1000)) 
    file_name = ‘news_’ + str(instance.id) + str('_logo_image_') + timestamp + str('.') + ext 
    full_path = path_first_component + file_name 
    return full_path 

class News(models.Model): 
    title = models.CharField(max_length=200, null=False) 
    date = models.DateField(null=False, default=datetime.now) 
    text = models.TextField(null=False, blank=True) 
    image = models.ImageField(upload_to=get_news_image_path) 

現在上傳的文件將被保存在 '在/ var/WWW/ssd1257/htdocs中/ HTML /項目/新聞'

你做

此外,還設置適當的MEDIA_URL

例如:MEDIA_URL =「媒體 所以對於上傳圖像生成的URL時,將是 MEDIA_URL + upload_to路徑

此外,配置web服務器從適當位置提供這些URL

+0

感謝您的幫助!:) –

0
from django.core.files.storage import FileSystemStorage  
upload_storage = FileSystemStorage(location=UPLOAD_ROOT, base_url='/') #upload root set to your project directory 
class News(models.Model): 
     title = models.CharField(max_length=200, null=False) 
     date = models.DateField(null=False, default=datetime.now) 
     text = models.TextField(null=False, blank=True) 
     image = models.ImageField(upload_to='/', storage=upload_storage) 
+0

當前上傳位置是/ htdocs/files/project/media。我如何更改/ htdocs/html/project/media的路徑? –

0

通過此設置自己造成的:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

修改成:

MEDIA_ROOT = '/htdocs/html/project/'