尝试使用django-filebrowser(使用uploadify)上传文件时,我收到了'IO ERROR'。
我应该澄清一下,当这不起作用的唯一情况是在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 :(得分: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'); },
});
显然你不想剪切和粘贴它,但它应该让你知道我在说什么。