Загрузка Django Ajax вне формы

Я пытаюсь использовать Ajax-загрузку Valum для загрузки файлов на Django- на основе сайта я делаю. В настоящее время я избегаю формы просто потому, что AU отправляет загрузку как полные данные POST в ajax запрос. Прямо сейчас у меня очень наивный подход к этому:

upload = SimpleUploadedFile( filename, request.raw_post_data )
...then I loop through the chunks to write to disk...

Это отлично работает ... с небольшими файлами. Я тестировал PDF-файлы, различные другие файлы и до пакета deb Google Chrome размером ~ 20 МБ, и они все отлично. Однако, если я перейду к чему-то вроде ISO-образа CD или DVD это ужасно бомбит. Часто Django отправляет сообщение о нехватке памяти ответ. На первый взгляд это имеет смысл, поскольку SimpleUploadedFile версия загружаемых классов в памяти. Я не вижу, как использовать TemporaryUploadedFile, потому что он не принимает фактическое содержимое в своем конструктор. В качестве примечания: я бы подумал, израсходовав доступная оперативная память, она перейдет в виртуальную память, но неважно.

Итак, мой вопрос, как мне заставить это работать? Есть ли способ лучше читать в файле? Я пробовал напрямую читать raw_post_data через IO Python (система использует 2.6.5), но кодировщик / декодер ascii FileIO явно будет жаловаться на символы, отличные от ascii, при работе с двоичные файлы. Мне не удалось найти информацию об изменении кодировщик / декодер.

Я бы не отказался передать данные в форму и заставить Django выполнять работа по выбору правильного класса загрузки и так далее, но я не могу понять как передать его, потому что что-то вроде

upload_form = UploadForm( request.POST, request.FILES )

не будет работать, потому что POST содержит файл, а не обычный Информация о Django и ФАЙЛЫ не существуют.

Как я уже сказал, меня не беспокоит метод решения, просто то, что Я получаю то, что работает! Спасибо!

11
задан Alex Kuhl 16 November 2010 в 15:48
поделиться