Django上传图片

时间:2017-09-20 13:49:11

标签: python django web

我想在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/")

3 个答案:

答案 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)

答案 1 :(得分:0)

此设置自行造成:

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

将其更改为:

MEDIA_ROOT = '/htdocs/html/project/'

答案 2 :(得分:0)

上传的文件通常保存在以下路径中 MEDIA_URL +模型类中“upload_to”属性中指定的路径

所以在你的情况下, MEDIA_ROOT = os.path.join(BASE_DIR,' media')=“/ htdocs / files / project / media” 如果Django不退出

,它将创建路径

但是我没有把'upload_to'中的圆点变成路径(“./ news /”)

因此,如果要更改存储上载文件的路径,只需更改MEDIA_ROOT即可 注意,请提供绝对完整路径

我猜它会的 MEDIA_ROOT =' / var / www / ssd1257 / htdocs / html / project'

此外,最好在保存之前重命名上传的文件以避免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)

现在上传的文件将保存在 ' /无功/网络/ ssd1257 / htdocs中/ HTML /项目/新闻

你完成了

此外,还要设置适当的MEDIA_URL

Ex:MEDIA_URL =“媒体 因此,当生成上传图像的URL时 MEDIA_URL + upload_to路径

此外,将Web服务器配置为从适当的位置提供这些URL