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

[程序 App] 文件\图片上传,简单粗暴

[复制链接]
发表于 2013-7-2 16:57:01 | 显示全部楼层 |阅读模式
本帖最后由 xiaozhuaisnow 于 2013-7-2 17:07 编辑

最近因项目需要图片和文件上传,要求图片上传后可以自动的等比剪切,生成自己后台设置或者自定义的尺寸。空值附件及图片大小等等。
找了找网上很多开源的代码,结果发现都不符合自己的需要。
最终直接选定swfupload和ThinkImage这两个东东。发现经过整理组合不是一般的强悍。

直接上附件(只能上传骨架版的),自己看吧
QQ截图20130702170654.jpg

QQ截图20130702165428.jpg
下面的bug可以自己关闭,在页面中debug: 直接设置false即可。
看到图片的红色框框内的东西是你上传成功自动加载的,原来是图片的缩略图,因为我要做成简单粗暴的,所以只有url的,点击url可查看或者下载自己上传的文件内容。
这个可以根据自己需求自定义。

2,如何设置图片自动剪切成自己想要的尺寸。在upload.php文件中(类别判断瞎写的,可根据自己的动手改)
PHP复制代码
 
<?php
include_once './ThinkImage/ThinkImage.class.php';
$ext_arr = array(
'gif', 'jpg', 'jpeg', 'png', 'bmp','flv',
'swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb',
'doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'
);
$pic_arr=array('gif', 'jpg', 'jpeg', 'png', 'bmp');
$attachment_arr=array('doc', 'docx', 'xls', 'xlsx', 'ppt','zip', 'rar', 'gz', 'bz2');
if (empty($_FILES['Filedata'])===false){//初次过滤
    $file=$_FILES['Filedata'];
    $filename=$file['name'];
   
    $one_type=substr(strrchr($filename,'.'),1);
    //exit(0);
    if (in_array($one_type,$ext_arr)){
        if (in_array($one_type,$pic_arr) || in_array($one_type,$attachment_arr)){ //允许小类型过滤
            $tmp_name = $_FILES['Filedata']['tmp_name'];
            $path='../../uploadfile/file/';
            $new_file_name = $path.date("YmdHis").rand(10000, 99999).'.'.$one_type;
            if (move_uploaded_file($tmp_name, $new_file_name) === false){
                echo 'error';    
            }else{
                //可在此添加
                if (in_array($one_type,$pic_arr)){//类别判定
                    $newname = $path.date("YmdHis").rand(20000, 99999).'.'.$one_type;
                    $img = new ThinkImage(THINKIMAGE_GD, $new_file_name);
                    $img->thumb(100, 100)->save($newname); //这里设置图片剪切尺寸
                    @unlink($new_file_name);
                    $new_file_name=$newname;
                }
                echo 'FILEID:'.$new_file_name;
            }
        }else{
            echo '不是允许的小类型';
        }
       
    }else{
        echo '不是允许类型';
    }
}else{
    echo '请选择文件';
}
 
exit(0);
 
复制代码


下面给出thinkimage图片剪切效果,为了展示性能,直接一张win7桌面大图剪切成100 X 100 的。tp确实图片剪切的不错
QQ截图20130702170131.jpg

swfupload.rar

228.45 KB, 下载次数: 116

评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

 楼主| 发表于 2013-7-2 17:00:34 | 显示全部楼层
补充一下,如果有不能上传,请仔细检查自己设定的路径和文件夹权限。特别是linux服务器建议直接777
发表于 2013-7-2 17:09:33 | 显示全部楼层
支持!
发表于 2013-7-2 19:42:22 | 显示全部楼层
貌似CI的image类文件也有截取功能
 楼主| 发表于 2013-7-7 19:12:03 | 显示全部楼层
本帖最后由 xiaozhuaisnow 于 2013-7-7 19:13 编辑
gogogo1027 发表于 2013-7-2 19:42
貌似CI的image类文件也有截取功能

ci的图像处理类不太好用,相比来说tk的更加简单粗暴,而且处理图像的还不错。自动等比剪切
ci的代码下面只是剪切
$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width']  = 75;
$config['height'] = 50;

$this->load->library('image_lib', $config);  
$this->image_lib->resize();//是不是这么用不清楚,没有实际操作,从文档上cp的。这个应该是最基础的配置.....需求稍微复杂一点估计更多

ci的配置比较麻烦,下面是tk的,下面是tk剪切后直接剪切图像+存储到指定目录+删除旧图像。
$img = new ThinkImage(THINKIMAGE_GD, $new_file_name);
                    $img->thumb(100, 100)->save($newname); //这里设置图片剪切尺寸
                    @unlink($new_file_name);
                    $new_file_name=$newname;

对比一下就知道那个方便了,不是说ci的img不好,而是根据需求灵活运用

发表于 2013-7-9 20:07:21 | 显示全部楼层
xiaozhuaisnow 发表于 2013-7-7 19:12
ci的图像处理类不太好用,相比来说tk的更加简单粗暴,而且处理图像的还不错。自动等比剪切
ci的代码下面只 ...

完全同意。
要灵活运用。
CI 最牛的地方就是可以任意扩展。

发表于 2013-7-10 08:34:43 | 显示全部楼层
swfupload貌似在火狐浏览器会有点问题。。有没有什么解决方法
 楼主| 发表于 2013-7-10 10:51:58 | 显示全部楼层
kinwyb 发表于 2013-7-10 08:34
swfupload貌似在火狐浏览器会有点问题。。有没有什么解决方法

经测试,在安装flash插件的前提下,ie 8 9 10 火狐  google 浏览器均无问题,如果有问题,请查看flash插件是否被激活,或者更新浏览器flash插件。以前在火狐中我碰到了无法上传的问题(是突然某一天不能用了),查看了一下,发现火狐浏览器地址栏的最左边提示flash插件未激活。更新插件就ok。建议测试环境下打开debug模式。可以查看究竟是哪里出了问题。
发表于 2013-7-10 16:46:57 | 显示全部楼层
mark 以后应该用得着,看起来貌似还不错.
发表于 2013-7-26 10:34:08 | 显示全部楼层
先保存下来 很好

本版积分规则