从视图访问上传的媒体文件

时间:2017-05-25 22:47:01

标签: django django-views

我希望让用户上传文件(CSV)然后在我的views.py中访问它,以便使用我自己的代码来阅读它。但是,我一直收到错误:

  

[Errno 2]没有这样的文件或目录:'D:/media/data.csv'

作为参考,我的项目存储在我的PC上的以下目录中:

D:\Python\[PROJECT_NAME]

以下是我的settings.py的样子:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

和我的views.py:

import os
from django.conf import settings

def create_chart(request):
    ...
    file = File.objects.get(id=4)
    file_ = open(os.path.join(settings.MEDIA_ROOT, file.file.url))

如果我进入我的管理员,我可以点击一个条目并访问该文件。但是当试图在views.py中获取它时,它是不行的。我完全被这个问题弄糊涂了,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是因为file.file.url指的是可以访问文件的网址,而不是服务器文件系统中可以找到文件的位置。

相反,您可以通过django's built-in FieldFile API访问文件内容。

    #在views.py文件中

def create_chart(request):
    file = File.objects.get(id=4)
    content = file.read()
    # you can also use open() to specify the mode
    file_obj = file.open(mode='rb')
    # and you can read the file line by line
    for line in file_obj:
        process_line(line)