Загрузка нескольких файлов с Django - PullRequest
4 голосов
/ 28 августа 2009

Как загрузить несколько файлов с помощью Django?

Ответы [ 2 ]

11 голосов
/ 15 ноября 2009

После большой боли я в конечном итоге получил uploadify (http://www.uploadify.com/), работающий с django, но проблема была не в django, а в том, чтобы заставить его работать с Apple Mac; браузеры на этой платформе не обслуживают куки из Flash, вам нужно установить их вручную:

Итак, я включил их в свой рендер-ответ:

return render_to_response('files_upload.html', {
       'session_cookie_name': settings.SESSION_COOKIE_NAME,
       'session_key': request.session.session_key

И представить их из uploadify через конфигурацию, указанную в шаблоне:

$(document).ready(function() {
    $('#fileInput').uploadify({
        'scriptData': {'{{session_cookie_name}}': '{{session_key}}'},

Я видел, что это было лучше с декоратором над представлением, но это был грязный хак, который я вставил в промежуточное ПО, чтобы скопировать POST в COOKIE до запуска промежуточного ПО сеанса для восстановления сеанса.

class FakeUploadCookieMiddleware(object):
   """TODO: replace the hardcoded url '/upload' with a 'reverse'."""
   def process_request(self, request):
       if request.path == '/upload/' \
           and request.POST.has_key(settings.SESSION_COOKIE_NAME):
           request.COOKIES[settings.SESSION_COOKIE_NAME] = \
               request.POST[settings.SESSION_COOKIE_NAME]
           logging.debug('Faking the session cookie for an upload: %s', \
               request.POST[settings.SESSION_COOKIE_NAME])
2 голосов
/ 28 августа 2009

Кто-то уже создал поле для мультизагрузки, которое может соответствовать вашим целям.

http://scompt.com/archives/2007/11/03/multiple-file-uploads-in-django

Django имеет отличную поддержку для создания форм и работы с загрузкой файлов. Я бы прочитал эти статьи, чтобы лучше понять, как работает код поля мультизагрузки.

  1. Django Docs - Forms
  2. Django Docs - Загрузка файлов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...