【问题标题】:Django is not serving media files uploaded by user on herokuDjango 不提供用户在 heroku 上上传的媒体文件
【发布时间】:2016-08-08 04:41:03
【问题描述】:

我已经尝试了所有方法,但不知何故我看不到用户上传的图像。我已经在 heroku 上部署了代码,并且每个静态文件都被正确加载。用户甚至要更正图像的路径,但不知何故服务器显示找不到图像的错误。

Settings.py
 # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
#STATICFILES_DIRS = (
#    os.path.join(PROJECT_ROOT, 'static'),
#)

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

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

Models.py
#this is for photos upload by user
class You(models.Model):
    user = models.ForeignKey(User,null=True)
    name=models.CharField(max_length=30,blank=True,default='pictures/videos')
    docfile = models.FileField(upload_to='documents/%Y/%m/%d', null=True,blank=True)

    def __unicode__(self):
        return self.user.username

#Views.py(To upload files)
@login_required
def upload(request):

    if request.method == 'POST':

        newdoc = You(docfile = request.FILES['file'],user=request.user)
        newdoc.save()
        msg='dee'
            # Redirect to the document list after POST
        return HttpResponse(json.dumps({'message': msg}))

    else:
        form = DocumentForm()



    # Render list page with the documents and the form
    return render(request,'mat_upload.html',{'form':form})

Template(gallery.html)
{% for document in documents %}
<img class="img-responsive" src="{{MEDIA_URL}}/media/{{ document.docfile }}" alt="hiiii" style="max-width: 100%;
    height: 250px;" />
{% endfor %}

@login_required
def gallery(request):
    documents =  You.objects.filter(user=request.user)

    return render(request,'gallery.html',{'documents': documents,})
Urls.py
from django.conf.urls import include, url

from django.contrib import admin

from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic import RedirectView
admin.autodiscover()

import harpoons.views


urlpatterns = [

    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('harp.urls')),
    url(r'^password_reset_recover/', include('password_reset.urls')),
    url(r'^accounts/', include('allauth.urls')),




]

【问题讨论】:

  • 你做了python manage.py collectstatic吗?
  • @alejosocorro 是的,我确实收集了静电。问题在于用户上传的媒体文件。它们正在上传,但是当我打开它们时 django 抛出错误,即使位置似乎正确

标签: django heroku


【解决方案1】:

您无法在 Heroku 本地保存用户上传的文件。文件系统是短暂的,不会在 dyno 重新启动或并发 dyno 之间持续存在。您需要将它们上传到更永久的地方;一个流行的选择是 Amazon S3,有很多库可以为您做到这一点。

【讨论】:

  • 谢谢丹尼尔,但我仍然应该看到图像,直到测功机运行
  • 仅当您实际配置了一些东西以从 /media/ 为它们提供服务时。 WhiteNoise,您可能正在使用它来提供静态资产,默认情况下仅在 STATIC_URL 提供服务。
猜你喜欢
  • 2014-07-11
  • 2013-03-20
  • 2016-04-04
  • 2014-05-15
  • 2020-12-31
  • 2011-06-16
  • 2012-09-30
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多