Я пытаюсь использовать 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 и ФАЙЛЫ не существуют.
Как я уже сказал, меня не беспокоит метод решения, просто то, что Я получаю то, что работает! Спасибо!