2017-09-20 111 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/'