Считать загруженный файл в строку, используя Django - PullRequest
3 голосов
/ 02 мая 2011

Я хотел бы прочитать загруженный файл в строку.Файл не разрешен, если его размер превышает 100 КБ.

У меня есть следующий код, но когда я выполняю его, используя 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 %}

Есть идеи как это исправить?

Ответы [ 3 ]

8 голосов
/ 03 мая 2011

Вы просматривали " Chunking " ваши загрузки. По сути, это разбивает вашу загрузку на несколько «кусков», поскольку она сохраняет их на диск. Я думаю, что это поможет вам загружать большие файлы.

Что касается пустого файла после выполнения «data = file.read ()», я думаю, вы можете сделать что-то вроде file.seek (0), чтобы вернуть указатель файла в начало файла. Я предполагаю, что при первом чтении файла указатель файла остается в конце файла, поэтому он выглядит пустым.

Надеюсь, это поможет, Джо

2 голосов
/ 02 мая 2011

Наиболее распространенный источник этой проблемы - не добавление атрибута enctype="multipart/form-data" в тег формы в вашем HTML:

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

</form>
0 голосов
/ 16 июня 2019

Даже после использования

<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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...