Uploading multiple files with Django

django, upload

Solution

After a lot of pain I eventually got uploadify (http://www.uploadify.com/) working with django, but the problem wasn't really django's, but getting it to work with Apple Mac's; browsers on that platform don't serve the cookies from within Flash; you need to set them manually:

So I include these in my render-to-reponse:

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

And present them from uploadify via the configuration laid down in the template:

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

I've seen this done better with a decorator over the view, but this was the dirty hack I put in middleware to copy the POST into COOKIE before the session middleware runs to restore the session.

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])

Problem

How do I upload multiple files with Django?

Original source