Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用户上载的图像未保存到生产中的媒体文件夹_Python_Django_Heroku_Web - Fatal编程技术网

Python 用户上载的图像未保存到生产中的媒体文件夹

Python 用户上载的图像未保存到生产中的媒体文件夹,python,django,heroku,web,Python,Django,Heroku,Web,我正在建立一个Django网站,用户可以通过一个表单上传一张图片,这个表单可以在网站上区分他们。这些文件保存在/grad/media/文件夹中(其中grad是应用程序的名称) 这是实现这一点的代码: uni_object = University.objects.get(user=request.user) logo = uni_object.logo if request.method == "POST": form = UpdateUniversityForm(request.POS

我正在建立一个Django网站,用户可以通过一个表单上传一张图片,这个表单可以在网站上区分他们。这些文件保存在/grad/media/文件夹中(其中grad是应用程序的名称)

这是实现这一点的代码:

uni_object = University.objects.get(user=request.user)
logo = uni_object.logo
if request.method == "POST":
    form = UpdateUniversityForm(request.POST, request.FILES)
    if form.is_valid():
        data = form.cleaned_data

        request.user.email = data['email']
        request.user.save()

        uni_object.university_name = data['university_name']
        uni_object.website = data['website']
        if request.FILES and request.FILES['logo'] != '':
            new_logo = data['logo']
            image = Image.open(new_logo)
            image = image.resize((400,400), Image.ANTIALIAS)
            thumb_io = StringIO.StringIO()
            image.save(thumb_io,format='JPEG')
            new_file_name = str(int(time.time()))
            thumb_file = InMemoryUploadedFile(thumb_io, None, '{0}.jpg'.format(new_file_name), 'image/jpeg',
                              thumb_io.len, None)
            uni_object.logo = thumb_file
        uni_object.save()
        updated = True
        logo = uni_object.logo
基本上我需要把它转换成一个400x400的正方形,然后保存它。此代码将在localhost上运行,并且文件将正确保存

但是,在调试为False的Heroku中:

  • 相同的代码不会将图片保存在媒体文件夹中
  • 即使通过管理面板手动保存图片,也不会将图片保存到媒体文件夹中
  • 即使照片存在于媒体文件夹中,也不会在网站上呈现
  • 媒体文件夹被推送到Heroku,因此本地的所有图片也都出现在Heroku上
就好像基本上完全忽略了媒体文件夹,尽管查看了heroku日志,但在尝试访问它时,我得到了HTTP 200:

2016-10-22T15:39:13.652167+00:00 heroku[router]: at=info method=GET path="/media/1477150753.jpg" 
host=www.gradba.se request_id=7e545ef5-92cf-406c-88c8-26d140541884 fwd="31.50.136.136,141.101.98.8" 
dyno=web.1 connect=0ms service=21ms status=200 bytes=6354
有人能告诉我为什么会这样吗?我认为media_root设置正确,因为它在dev上工作


谢谢

您的设置是什么?这并不能直接回答问题,但请注意,此设计不适用于Heroku。应用程序运行在一个“动态”文件系统中,该文件系统不会在重新启动时保存数据;dynos每天至少重新启动一次。因此,任何写入媒体根目录的文件都将消失。您将需要使用外部文件或blob存储-查看您的设置是什么?这不会直接回答问题,但请注意,此设计不适用于Heroku。应用程序运行在一个“动态”文件系统中,该文件系统不会在重新启动时保存数据;dynos每天至少重新启动一次。因此,任何写入媒体根目录的文件都将消失。您将需要使用外部文件或blob存储-签出