2011-05-26 125 views
1

我在使用django-filebrowser(使用uploadify)試圖上傳文件時遇到'IO ERROR'。Uploadify IO錯誤(django-filebrowser)

我應該澄清,這種情況不起作用的唯一情況是在OSX上使用Firefox 4時。在Windows上工作的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 - user [26/May/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和瀏覽器/ flash插件的模糊不兼容。

我是不是正在運行mod_security。 我正在使用mod_wsgi運行django(並且沒有任何上傳文件的麻煩)。

請幫忙!

回答

0

您可能有問題,您沒有發佈post方法所需的csrf標記。您可以使用@csrf_exempt裝飾器,或將數據添加到uploadify。將{%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 2011-05-26 21:02:36