我完全感到困惑,因为我无法确定为什么这不起作用的原因。当我使用uploadify的默认脚本时,下面列出的代码工作正常:
$('#file_upload').uploadify({
'uploader' : '<?= base_url();?>js/uploadify/uploadify.swf',
'script' : '<?= base_url();?>js/uploadify/uploadify.php',
'cancelImg' : '<?= base_url();?>js/uploadify/cancel.png',
'queueID' : 'upload_queue',
'folder' : '/ths/images/buildings/',//be sure to check this value on the production site to make sure it's relative to the site root
'auto' : false,
'sizeLimit' : 1024000,
'multi' : true,
'removeCompleted': true,
'fileExt' : '*.jpg;*.gif;*.png;*.jpeg;',
'fileDesc' : 'Web Image Files (.JPG, .GIF, .PNG, .JPEG)',
'onAllComplete' : function(event, data) {
/*Code to update the page with results*/
}
});
但是,只要我将脚本更改为
'script' : '<?= base_url();?>image/upload'
我收到一条错误回复,上面写着“HTTP 302错误”,即使我所做的只是将默认的Uploadify脚本的内容复制到控制器方法。
注意:我正在使用CodeIgniter,在.htaccess文件中打开mod_rewrite以从URL中删除'index.php'。我也在使用数据库来管理会话。我不知道这些信息是否有用,但我认为我会加入,因为这些似乎是其他人提问的重要因素。
答案 0 :(得分:1)
Uploadify不会传递当前会话信息(因为它是基于Flash的),因此您将被重定向到您的登录脚本。如果检查日志文件,您将看到文件发布的用户代理不同。您需要以不同于Uploadify的方式处理授权,以忽略您的默认会话处理程序并检查参数或其他值。
您可以传递JSON数组以及文件请求。我在uploadify配置文件中使用了以下内容:
// abreviated javascript to pass data via uploadify
$('#element').uploadify({
'uploader' : '...',
...
'scriptData' : {"user_id":"1", "user_id_sig":"xxxxx"},
...
'onAllComplete' : function(){ ... }
});
您可以使用以下方式生成:
// create the signature value
$a_secret_string = 'abc123';
print json_encode(array(
'user_id' => $user_id,
'user_id_sig' => md5($user_id . $a_secret_string),
));
在控制器的upload方法中,检查sig + user_id值是否已检出,并在当时从DB中提取必要的会话信息。
// check the signature value
$a_secret_string = 'abc123';
if(md5($_REQUEST['user_id'] . $a_secret_string) == $_REQUEST['user_id_sig']){
// do the upload
} else {
// handle the error
}