xiaozhuaisnow 发表于 2013-7-2 16:57:01

文件\图片上传,简单粗暴

本帖最后由 xiaozhuaisnow 于 2013-7-2 17:07 编辑

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

直接上附件(只能上传骨架版的),自己看吧



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

2,如何设置图片自动剪切成自己想要的尺寸。在upload.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确实图片剪切的不错


xiaozhuaisnow 发表于 2013-7-2 17:00:34

补充一下,如果有不能上传,请仔细检查自己设定的路径和文件夹权限。特别是linux服务器建议直接777

kuan²º¹³ 发表于 2013-7-2 17:09:33

支持!

gogogo1027 发表于 2013-7-2 19:42:22

貌似CI的image类文件也有截取功能

xiaozhuaisnow 发表于 2013-7-7 19:12:03

本帖最后由 xiaozhuaisnow 于 2013-7-7 19:13 编辑

gogogo1027 发表于 2013-7-2 19:42 static/image/common/back.gif
貌似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不好,而是根据需求灵活运用

Hex 发表于 2013-7-9 20:07:21

xiaozhuaisnow 发表于 2013-7-7 19:12 static/image/common/back.gif
ci的图像处理类不太好用,相比来说tk的更加简单粗暴,而且处理图像的还不错。自动等比剪切
ci的代码下面只 ...

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

kinwyb 发表于 2013-7-10 08:34:43

swfupload貌似在火狐浏览器会有点问题。。有没有什么解决方法

xiaozhuaisnow 发表于 2013-7-10 10:51:58

kinwyb 发表于 2013-7-10 08:34 static/image/common/back.gif
swfupload貌似在火狐浏览器会有点问题。。有没有什么解决方法

经测试,在安装flash插件的前提下,ie 8 9 10 火狐google 浏览器均无问题,如果有问题,请查看flash插件是否被激活,或者更新浏览器flash插件。以前在火狐中我碰到了无法上传的问题(是突然某一天不能用了),查看了一下,发现火狐浏览器地址栏的最左边提示flash插件未激活。更新插件就ok。建议测试环境下打开debug模式。可以查看究竟是哪里出了问题。

wshm520 发表于 2013-7-10 16:46:57

mark 以后应该用得着,看起来貌似还不错.

duguhu007 发表于 2013-7-26 10:34:08

先保存下来 很好
页: [1] 2
查看完整版本: 文件\图片上传,简单粗暴