无法访问MEDIA文件夹中的视频文件。

3

这里有一个奇怪的问题。我正在构建一个基础应用程序,允许用户上传视频并播放它们。很简单。当用户上传文件时,将其链接存储在mysql中,并将文件本身存储在web_app/media/videos/中的文件系统中。

在settings.py中:

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

我相关的目录结构:

project/web_app/static/
project/web_app/media/

上传工作正常,然后数据库条目和视频文件都按预期落地。问题在于我无法通过视频链接访问文件。现在,在我的视图模板中,我有以下内容:
{% block body %}
    <div><video src="{{ MEDIA_URL }}{{ path_to_video }}" width=640 height=360 controls></video></div>
    <div><video src="/static/videos/2015/05/18/vid1.mp4" width=640 height=360 controls></video></div>
{% endblock body %}

显然我正在使用第一个div,第二个div用于调试-你很快就会明白为什么。这个模板会生成以下HTML:

<div><video src="/media/videos/2015/05/18/vid1.mp4" width=640 height=360 controls></video></div>
<div><video src="/static/videos/2015/05/18/vid1.mp4" width=640 height=360 controls></video></div>

正如预期的那样。事实是:第一个链接无法打开,显示找不到文件。但是,如果我手动将“videos/2015/etc...”复制到/static文件夹中,第二个链接就可以按照预期工作了。这是怎么回事?媒体文件夹存在权限问题吗?

我不知道这是否有所不同,但这是在Windows上进行的…谢谢。


你是只使用开发服务器还是在前面使用apache/nginx? - reptilicus
通过PyCharm启动开发服务器。 - Gadzooks34
可以将权限(暂时)更改为777或Windows等效权限,以进行检查。 - reptilicus
1个回答

0

这是有人在Django开发服务器上遇到的问题。这是我在urls.py中的内容:

from django.conf import settings
from django.conf.urls.static import static

# ...

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)  # pragma: nocover

生产环境中,这应该由Web服务器处理。

#pragma注释是为coverage包准备的。)

以上内容在Django文档:在开发期间为用户上传的文件提供服务中有所涉及。另请参阅开发期间提供静态文件服务


它可以工作!但我不理解它。这个条目是做什么的? - Gadzooks34
我非常高兴它做到了。我已经提供了文档链接。不过不要提供太多细节。Django开发服务器不会提供这些文件。 - Wtower
需要一个非常重要的免责声明:此仅供开发使用 - Daniel Roseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接