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

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

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

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

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

 file=$('#fselect').get(0).files[0] 

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

 def storeAndProcessFile(request,file): pass 

One Solution collect form web for “используя javascript и django для загрузки текстового файла в какую-либо папку на сервере”

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

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

Поэтому, когда пользователь нажимает кнопку отправки, браузер загружает этот файл в /foo/url/ используя метод POST HTTP. Затем на стороне сервера в 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.

  • в чем разница между объектами python и объектами json?
  • Что эквивалентно .get в javascript?
  • Преобразование даты. NET JSON в ISO
  • Как зашифровать мои данные на стороне сервера, используя django
  • Java или любой другой язык: какой метод / класс вызывал мой?
  • Как я могу нажать кнопку «Дополнительно» при веб-сканировании Tripadvisor с использованием селена?
  • как очистить iframe, который не отображается непосредственно в BeautifulSoup и требует использования селена?
  • Django-TinyMCE с несколькими формами
  • Python - лучший язык программирования в мире.