Я пытаюсь использовать Valum Ajax Upload для загрузки файлов на Django- основанный сайт, который я делаю. В настоящее время я избегаю формы просто потому, что AU отправляет загрузку как полноту данных POST в ajax запрос. Сейчас у меня очень наивный подход к этому:
upload = SimpleUploadedFile( filename, request.raw_post_data )
...then I loop through the chunks to write to disk...
Это отлично работает... на небольших файлах. Я тестировал с помощью PDF файлов, различных другие файлы и до ~ 20 МБ пакета Google Chrome deb, и они все отлично. Однако, если я перехожу к чему-то вроде CD или DVD iso он ужасно бомбит. Часто Django отправляет обратно из памяти ответ. На первый взгляд это имеет смысл, поскольку SimpleUploadedFile загружаемая в память версия классов загрузки. Я не вижу, как использовать TemporaryUploadedFile, потому что он не принимает фактическое содержимое в своем конструктор. В качестве примечания: я бы подумал, доступная оперативная память, она пойдет в виртуальную память, но что угодно.
Итак, мой вопрос: как мне заставить это работать? Есть ли способ лучше читать в файле? Я попытался напрямую прочитать raw_post_data через Python IO (система использует 2.6.5), но FileIO ascii encoder/decoder очевидно, будут жаловаться на персонажей, не относящихся к ascii, при работе с двоичные файлы. Мне не удалось найти информацию об изменении кодер/декодер.
Я бы не прочь передать данные в форму и Django сделать работа по выбору правильного класса загрузки и т.д., но я не могу понять как передать это, потому что что-то вроде
upload_form = UploadForm( request.POST, request.FILES )
не будет работать, потому что POST содержит файл, а не обычный Информация о Django и FILES не существует.
Как я уже сказал, меня не волнует метод решения, просто Я получаю то, что работает! Благодарю!