Вопрос по javascript, python – используя javascript и django для загрузки текстового файла в какую-либо папку на сервере

2

Мне нужно загрузить текстовый файл, который содержит некоторые данные из моегоlocal filesystem сказать{{MEDIA_URL}}/uploadfolderЭтот файл должен быть обработан одной из функций в моемdjango Посмотреть.

Я создал<input type="file" id="fselect" > в моей HTML-странице. Я создал файл javascript, в котором я пытался вызвать функцию загрузки, как показано ниже

<code> $(document).ready(function(){
      ...
      $('#fselect').change(function(){ 
         file=$('#fselect').get(0).files[0];
         uploadFile(file);
      }

});
</code>

Когда я использовал Firebug, и попытался

<code>file=$('#fselect').get(0).files[0]
</code>

Мне удалось получить объект File, который является текстовым файлом, выбранным с использованием элемента ввода. Как я могу вызвать представление django с этим объектом File? В представлении django, каким типом данных будет этот объект File?

<code>def storeAndProcessFile(request,file):
    pass
</code>

Ваш Ответ

1   ответ
8

сначала вы должны понять, как файлы обычно загружаются и обрабатываются с помощью Django. Рассмотрим следующую HTML-форму:

<form method="post" action="/foo/url/">
    <input type="file" name="foofile">
    <input type="submit" value="Upload">
</form>

Поэтому, когда пользователь нажимает кнопку «Отправить», браузер загружает этот файл в/foo/url/ используя метод HTTPPOST, Затем на стороне сервера в Django, URL/foo/url/ будет сопоставлен с некоторым видом. В вашем случае это будетstoreAndProcessFile, Таким образом, представление должно будет взять загруженный файл и сохранить его на диске (или, возможно, в какой-либо другой системе хранения).

Теперь представление не получает файл как один из его параметров функции, как вы показали в своем вопросе. Это связано с тем, что данные GET, POST и FILE передаются в HTTP-запросах. Таким образом, файл на самом деле будет частьюrequest параметр внутри вида. Вы сможете ссылаться на файл поrequest.FILES['foofile'].

Чтобы просто сохранить файл на диске, ваш вид может выглядеть примерно так:

def storeAndProcessFile(request):
    # make sure the the request method is POST
    if request.method != 'POST':
        return HttpResponseBadRequest('Only POST requests are allowed')
    # now get the uploaded file
    file = request.FILES['foofile']
    # the file is going to be an instance of UploadedFile
    with open('/destination/path/%s' % file.name, 'wb+') as dest:
        for chunk in file.chunks():
            dest.write(chunk)
    # return success message
    return HttpResponse('File uploaded')

Этот код в значительной степени из документации Django. Если вы хотите узнать больше, вы можете прочитать этоВот.

Что касается Javascript, существует множество плагинов jQuery, в которые можно загружать файлы, используя ajax или даже несколько файлов одновременно. мне действительно нравитсяэтот библиотека. Он имеет много функций, включая отправку нескольких файлов. Однако, если это слишком много, вы можете просто выполнить поиск плагина для загрузки файлов jQuery, и их множество, но я недавно не проверял другие, поэтому не могу дать никаких рекомендаций.

Однако при отправке ajax-запросов на сайт Django, который называется CSRF, следует учитывать одну вещь. Начиная с Django 1.2.5 они изменили способ проверки CSRF, и это может нарушить многие загружаемые библиотеки. Если вам не нужно об этом беспокоиться, вы всегда можете добавитьcsrf_exempt декоратор:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def storeAndProcessFile(request):
    ...

Однако, если вам нужен CSRF, вы можете взглянуть на пример реализации интеграции загрузчика файлов jQuery с включенной CSRF.Вот.

, спасибо за ответ ... постараюсь, если я смогу использовать jquery для создания поста, а затем получу файл из запроса django view. ФАЙЛЫ. Большое спасибо, особенно за подробное объяснение damon
Я рекомендую сначала заставить его работать без javascript с помощью простой формы, а затем, когда это сработает, добавить js.

Похожие вопросы