2011-05-26 3 views
1

Я получаю сообщение «IO ERROR» при попытке загрузить файл с помощью django-filebrowser (который использует функцию uploadify).Загрузить IO-ошибку (django-filebrowser)

Должен пояснить, что единственный случай, когда это не работает, - это использование Firefox 4 на OSX. IE8 на окнах работает.

Кроме того, он также работает с Firefox при использовании локального сервера-разработчика.

Следует также отметить, что я получаю эту точную ошибку в демонстрации собственного сайта uplodify.

Это то, что я могу видеть из Wireshark:

POST /djadmin/filebrowser/check_file/ HTTP/1.1 
Host: xxx 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Accept: application/json, text/javascript, */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: xxx 
Content-Length: 57 
Cookie: csrftoken=xxx sessionid=xxx 
Authorization: Basic xxx 
Pragma: no-cache 
Cache-Control: no-cache 

UPBWID=fd.png&folder=%2Fdjadmin%2Ffilebrowser%2Fupload%2FHTTP/1.1 200 OK 
Date: Thu, 26 May 2011 20:08:30 GMT 
Server: Apache/2.2.9 
Vary: Accept-Language,Cookie 
Content-Language: el 
Content-Length: 2 
Connection: close 
Content-Type: text/html; charset=utf-8 

{} 

Насколько я знаю, возвращаемое значение {} нормально.

Это единственный вывод, который я получаю от apache: xxx - пользователь [26/май/2011: 20: 08: 30 +0000] "POST/djadmin/filebrowser/check_file/HTTP/1.1" 200 2 "xxx/djadmin/filebrowser/upload/"" Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv: 2.0.1) Gecko/20100101 Firefox/4.0.1 "

Я вижу, что многие люди испытывают та же проблема. Обычная ошибка - mod_security, mod_wsgi и неопределенные несовместимости с браузерами/флеш-плагином.

Я не работает mod_security. Я запускаю django с помощью mod_wsgi (и не испытываю проблем с загрузкой файлов по старинке).

Пожалуйста, помогите!

ответ

0

У вас может возникнуть проблема, когда вы не отправляете токен csrf, необходимый для методов post. Вы можете использовать декоратор @csrf_exempt или добавить данные для добавления. добавьте {% csrf_token%} в форму и преобразуйте ее в параметр postData. Для третьей версии я использую что-то вроде этого:

(function ($) { 
    $.fn.serializeJSON = function() { 
     var json = {}; 
     jQuery.map($(this).serializeArray(), function (n, i) { 
      json[n['name']] = n['value']; 
     }); 
     return json; 
    }; 
})(jQuery); 


$('#id_filefield').uploadify({ 
    'swf' : '{{ STATIC_URL }}js/libs/uploadify/uploadify.swf', 
    'uploader' : '{% url 'upload_form' %}', 
    'cancelImage' : '{{ STATIC_URL }}js/libs/uploadify/uploadify-cancel.png', 
    'checkExisting' : false, 
    'auto'  : true, 
    'postData': $('#file_upload_form').serializeJSON(), 
    'multi': true, 
    'uploaderType': 'flash', 
    'requeueErrors': false, 
    'fileObjName': 'filefield', 
    'fileSizeLimit': 1024000, 
    'onSelect': function() { $('#id_filefield').uploadifySettings('postData', $('#file_upload_form').serializeJSON()); }, 
    'onQueueComplete': function() { ajaxdialog.dialog('close'); }, 
    }); 

, очевидно, вы не хотите, чтобы просто вырезать и вставить, но это должно дать вам представление о том, что я говорю.

+0

Функция check_file, которая отображается в моем сообщении, уже использует декоратор csrf_exempt. – Dim

Смежные вопросы