Displaying the contents (rather than saving) of a downloaded file using Django

How can I get a form with FileField where the downloaded file will not be saved, but instead its text content will be extracted and displayed?

+3
source share
1 answer

Docs: http://docs.djangoproject.com/en/dev/topics/http/file-uploads/

Short version:

  • The upload form should have a field forms.FileField.
  • When the form submits, it goes to the URL, which goes to the view function that you wrote. This view function takes on a value HttpRequest(commonly called request).
  • Extract the file from request.FILES[].

, :

upFile = forms.FileField

:

def uploadView(request):
    upFile = request.FILES["upFile"]

upFile - UploadedFile, . UploadedFile :

  • name:
  • size:

:

  • read(): . , , 2,5 .
  • multiple_chunks(): True, .
  • chunks(): ( ), .

, , , :

outFile = open("/tmp/uploadTest.txt", "w")
if not upFile.multiple_chunks():
    outFile.write(upFile.read())
else:
    for chunk in upFile.chunks():
        outFile.write(chunk)
outFile.close()

, multiple_chunks() True, , , 2,5 .

EDIT: , , . , , , , 2,5 , :

def uploadView(request):
    upFile = request.FILES["upFile"]
    context = {}
    if upFile.multiple_chunks():
        context["uploadError"] = "Uploaded file is too big (%.2f MB)." % (upFile.size,)
    else:
        context["uploadedFile"] = upFile.read()
    return render_to_response('fileUploadPage.html', context)

, , , .

fileUploadPage.html -:

<div id="uploaded">
    {% if uploadError %}
    <span class="error">{{ uploadError }}</span>
    {% else %}
    {{ uploadedFile }}
    {% endif %}
</div>

2: . form. , :

<form method="post" action="{% url uploadFile %}"
{% if form.is_multipart %}
    enctype="multipart/form-data"
{% endif %}>
{{ form }}
</form>

, , , if:

<form method="post" action="{% url uploadFile %}" enctype="multipart/form-data">
{{ form }}
</form>

. {% url ___ %} URL- URL-. - , urls.py, , url, :

urlpatterns = patterns('',
    url('^uploadform$', 'myapp.views.uploadFormView', name='uploadForm'),
    url('^upload$', 'myapp.views.uploadView', name='uploadFile'),
    # ...
)
+9

Source: https://habr.com/ru/post/1742824/


All Articles