使用Django将上传的文件读入字符串

使用Django将上传的文件读入字符串,django,Django,我想把上传的文件读成字符串。如果文件大小大于100k,则不允许使用该文件 我有下面的代码,但是当我使用pdb单步执行它时,在data=file.read()行执行之后,数据是空的 def import_data(request): params = {} if request.method == 'POST': pdb.set_trace() form = UploadFileForm(request.POST, request.FILES)

我想把上传的文件读成字符串。如果文件大小大于100k,则不允许使用该文件

我有下面的代码,但是当我使用pdb单步执行它时,在data=file.read()行执行之后,数据是空的

def import_data(request):
    params = {}
    if request.method == 'POST':
        pdb.set_trace()
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = request.FILES['file']
            data = file.read()
            update_database(data)
    else:
        form = UploadFileForm()
    params['form'] = form
    return render_to_response('import_data.html',
                                params,
                                context_instance=RequestContext(request))
这是我的模板:

% extends 'base.html' %}
{% block content %}

    <form enctype="multipart/form-data" action="" method="post">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit" />
    </form>
{% endblock %}
%extends'base.html%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}

有什么办法可以解决这个问题吗?

这个问题最常见的原因不是将属性
enctype=“multipart/form data”
添加到HTML中的表单标记中:

<form method="post" enctype="multipart/form-data">

</form>

您是否查看了“”您的上载内容。这基本上就是把你的上传分成多个“块”,然后保存到磁盘上。我认为这将帮助你上传更大的文件

关于执行“data=file.read()”后的空文件,我认为可以执行类似file.seek(0)的操作,将文件指针移回文件的开头。我猜第一次读取文件时,会将文件指针留在文件的末尾,因此看起来是空的

希望这有帮助, 乔

即使在使用

<form method="post" enctype="multipart/form-data"></form>

你能把你的全部视图放进去吗?我已经用我的模板更新了这个问题,其中已经包括了这个。
        from django.core.files.storage import default_storage

        my_file=request.FILES['attachment_1']
        BASE_DIR = 
        os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        media_path = os.path.join(BASE_DIR,'media')
        full_path=os.path.join(media_path,my_file.name)
        #print(full_path)

        f = default_storage.open(full_path, 'r')
        data = f.read()
        f.close()
        print(data)