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

[程序 App] 图片上传重命名 好处多多 支持中文名图片

[复制链接]
发表于 2009-9-22 18:48:19 | 显示全部楼层 |阅读模式
原文http://www.phpall.cn/forum/read.php?tid=178

图片上传重命名好处多多,
  上传的图片重新让系统自己命名,这样便于管理,上传的人多了的话,如果上传两张不同的图片,而上传者自己给他们命名的名字是一样的,那不就乱了。
   上传的图片重命名还有一个好处是,可以支持中文名称的图片上传。
   我在ci的图片上传类做了点小的改动,就可以实现图片的重命名和中文图片的上传。
代码如下:
PHP复制代码
<?php
class Upload extends Controller {
 
 function Upload() {
  parent::Controller();
  // $this->load->helper('form');
 }
 
 function index() {
  $this->load->view('upload_form');
 }
 
 function doUpload() {
  $config['upload_path'] = 'uploads/';
  $config['allowed_types'] = 'gif|jpg|jpeg|png';
  $config['max_size'] = '1000';
  $config['max_width'] = '1920';
  $config['max_height'] = '1280';      
   
  $this->load->library('upload', $config);
   
  if(!$this->upload->do_upload()) echo $this->upload->display_errors();
  else {
   //$data = array('upload_data' => $this->upload->data());
   //print_r($data);
   //exit;
   $fInfo = $this->upload->data();
   print_r($fInfo);
   //exit;
   $this->_createThumbnail($fInfo['file_name']);
   
   $data['uploadInfo'] = $fInfo;
   $data['thumbnail_name'] = $fInfo['raw_name'] . '_thumb' . $fInfo['file_ext'];
   $this->load->view('upload_success', $data);  
  }
 }
 
 function _createThumbnail($fileName) {
  $config['image_library'] = 'gd2';
  $config['source_image'] = 'uploads/' . $fileName;  
  $config['create_thumb'] = TRUE;
  $config['maintain_ratio'] = TRUE;
  $config['width'] = 75;
  $config['height'] = 75;
   
  $this->load->library('image_lib', $config);
  if(!$this->image_lib->resize()) echo $this->image_lib->display_errors();
 }
 
 function upload_file(){
     
     $config['upload_path'] = './uploads/';
     $config['allowed_types'] = 'gif|jpg|png';
     $config['max_size'] = '1000';
      $config['max_width']  = '1024';
      $config['max_height']  = '768';
      $config['encrypt_name']  = true;
      $this->load->library('upload', $config);
     if( ! $this->upload->do_upload()){
     $error = array('error' => $this->upload->display_errors());
     return $error;
    }else{
     $data = array('upload_data' => $this->upload->data());
  print_r($data);exit;
     return  $data;
      }
   }
 function a(){
 $data=$this->upload_file();
    print_r($data);exit;
 }
}
复制代码



以上这段代码我将能够给图片重命名的函数和不能给图片重命名的函数摆到一起,这样便于大家对比着来学习。
上面function doUpload() 这个函数是不能给图片重命名的,我在里面的这句   $fInfo = $this->upload->data();
后面加了
   print_r($fInfo);  

打印出来的结果是这样的:
Array
(
    [file_name] => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    [file_type] => image/jpeg
    [file_path] => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/
    [full_path] => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    [raw_name] => T1CbdbXdpbdED1upjX_160x160_
    [orig_name] => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    [file_ext] => .jpg
    [file_size] => 15.06
    [is_image] => 1
    [image_width] => 160
    [image_height] => 120
    [image_type] => jpeg
    [image_size_str] => width="160" height="120"
)
打印出来后,大家可以看到里面的orig_name,上传后的文件名file_name都是一样的,即没有实现重命名功能。

接着我们来看我写的下一个函数function upload_file()
这个函数和刚才那个函数有个地方不同,就是我在结尾处加上了$data = array('upload_data' => $this->upload->data());
  print_r($data);
     return  $data;
就是将文件的上传信息放在一个数组里面,然后作为返回值来返回。
接着我们需要在另外个函数 function a() 里面调用它,依然打印出结果,
Array
(
    [upload_data] => Array
        (
            [file_name] => bda39e2ad316ed0fe5dd55dc80c066e7.jpg
            [file_type] => image/jpeg
            [file_path] => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/
            [full_path] => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/bda39e2ad316ed0fe5dd55dc80c066e7.jpg
            [raw_name] => bda39e2ad316ed0fe5dd55dc80c066e7
            [orig_name] => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
            [file_ext] => .jpg
            [file_size] => 15.06
            [is_image] => 1
            [image_width] => 160
            [image_height] => 120
            [image_type] => jpeg
            [image_size_str] => width="160" height="120"
        )
)
你会看到上传后的文件名被重新命名了。同时提交到a()函数的图片可以是中文名,
而提交到doUpload()函数的图片不能是中文名。

我将源代码放在附件中。  view里面有两个上传文件的页面。 一个提交到doUpload函数 ,另外一个提交到 a函数
方便大家对比。

imageUpload.rar.zip

659.79 KB, 下载次数: 269

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2014-8-29 10:42:42 | 显示全部楼层
感谢楼主哈
发表于 2009-9-22 20:11:08 | 显示全部楼层
我帮楼主改了一下高亮,呵呵。
 楼主| 发表于 2009-9-22 20:13:15 | 显示全部楼层
thanks hex
发表于 2009-9-22 20:26:12 | 显示全部楼层
哈哈,多多把 phpall 的好东西转发到 ci 中国吧
发表于 2009-9-22 21:10:27 | 显示全部楼层
我没看明白啊~两个方法都是调用的CI的upload类啊~只是config不同而已~对吧?
 楼主| 发表于 2009-9-22 23:58:53 | 显示全部楼层
调用的是一样的,
只是加了这几句$data = array('upload_data' => $this->upload->data());
  print_r($data);
     return  $data;
同时让它有个返回值而已。
发表于 2009-9-25 12:04:32 | 显示全部楼层
明白了~NB~
发表于 2010-5-17 15:33:07 | 显示全部楼层
恩~~~谢谢楼主~简单易懂~
发表于 2010-7-6 10:18:16 | 显示全部楼层
东西拿走了,还没看呢!~先回帖在看代码!~嘿嘿
发表于 2012-7-17 08:32:30 | 显示全部楼层
恩 看这么好正好我需要 先拿来用用了 先谢谢楼主了  不懂我在问了 呵呵

本版积分规则