用户
 找回密码
 入住 CI 中国社区
搜索
查看: 12243|回复: 10
收起左侧

[库 Library] 致所有想要使用swfupload的人们

  [复制链接]
发表于 2010-6-27 17:37:58 | 显示全部楼层 |阅读模式
使用swfupload纯粹是因为它可以选择过滤不必要的文件格式,于是尝试了一下,于是写了一个swfupload最简单的代码,使用标准的ci文档中的upload_form.php,增加了一些js代码。swfupload路径在根目录中的js/swfupload中,注意file_post_name 需要和后台do_upload的参数一致:
HTML复制代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<script src="<?=base_url().'js/swfupload/swfupload.js'?>" type="text/javascript"></script>
<title>Upload Form</title>
</head>
<script type="text/javascript">
    var swfu;
 
    window.onload = function() {
        var settings = {
            flash_url : "<?=base_url().'js/swfupload/swfupload.swf'?>",
            upload_url: "<?=site_url('upload/do_upload')?>",
            file_size_limit : "100 MB",
            file_types : "*.jpg;*.png;*.gif",
            file_types_description : "图片文件",
            file_post_name : 'upload',
            prevent_swf_caching : false,
            file_upload_limit : 100,
            file_queue_limit : 1,
            debug: true,
 
            // Button settings
            button_image_url: "<?=base_url().'js/swfupload/XPButtonUploadText.png'?>",
            button_width: "64",
            button_height: "29",
            button_placeholder_id: "upload",
            button_text: '<span class="theFont">上传</span>',
            button_text_style: ".theFont { font-size: 16; }",
            button_text_left_padding: 12,
            button_text_top_padding: 3,
           
            // The event handler functions are defined in handlers.js
            //file_queued_handler : function(){
            //file_queue_error_handler : fileQueueError,
            //file_dialog_complete_handler : fileDialogComplete,
            //upload_start_handler : function(){
            //upload_progress_handler : function(){alert('strat');},
            file_dialog_complete_handler : function(){this.startUpload();},
            //upload_error_handler : function(){alert('error');},
            upload_success_handler : function(file,serverData){alert(serverData);},
            //upload_complete_handler : uploadComplete,
            //queue_complete_handler : queueComplete    // Queue plugin event
        };
 
        swfu = new SWFUpload(settings);
     };
function upload()
{
    swfu.startUpload();
    return true;
}
</script>
<body>
 
<?php echo $error;?>
 
<?php echo form_open_multipart('upload/do_upload');?>
 
<input type="file" name="upload" id='upload' size="20" />
 
<br /><br />
 
<input type="submit" value="upload" />
 
</form>
 
</body>
</html>
复制代码

然后结果让我非常郁闷,总是提示错误——不允许上传格式,然后仔细对比了正常上传和swfupload上传的差异,终于发现,swfupload上传$_FILES数组中的type居然是application/octet-stream,而在正常上传则是jgp-x之类的。
这个问题虽然小,但是却浪费了我不少时间,在此希望能够对其他人有所帮助。
stblog也使用了swfupload,应该已经解决了此问题。CI英文论坛也有解释解决方法http://codeigniter.com/forums/viewthread/70979/——虽然是英文的,但是应该没有问题吧
发表于 2010-6-27 20:36:06 | 显示全部楼层
呵呵,经过 flash 上传的都没有 mime 类型。
只能通过扩展名来验证文件了,呵呵。
发表于 2010-6-27 21:30:36 | 显示全部楼层
swfupload是个非常不错的大文件上传解决方案。
 楼主| 发表于 2010-6-28 09:38:26 | 显示全部楼层
我本来想把swfupload集成到ckeditor的,看样子那必须得修改ck的核心源码。还是放弃算了
回复 2# Hex
是我对flash不了解,对正常的上传也不甚了解,flash上传也有其不好之处啊……问一下:mine类型可以伪装吗?
发表于 2010-6-28 10:27:18 | 显示全部楼层
mime 这个 http header 当然可以伪造。
最最保险的就是根据文件内容检查,这个是有检测工具的,PHP 就有。
发表于 2011-12-5 10:24:41 | 显示全部楼层
学习了。现在正在集成swfupload
发表于 2012-1-2 23:01:07 | 显示全部楼层
能跨域上传么?
www.a.com 传到 img.a.com
发表于 2012-1-5 15:07:46 | 显示全部楼层
的确比自己写的好看
发表于 2012-8-2 10:23:54 | 显示全部楼层
a123123 发表于 2012-1-2 23:01
能跨域上传么?
从www.a.com 传到 img.a.com

不能。。只能通过选传到www.a.com然后在通过PHP里的FTP函数传到img.a.com
发表于 2013-11-21 11:07:46 | 显示全部楼层
楼住能不能贴个代码,研究下,我在弄这个,就是怎么在控制器接收上传的数据并插入到数据库,失败了,希望学习下你的代码

本版积分规则