xiaoniao 发表于 2009-9-22 18:48:19

图片上传重命名 好处多多 支持中文名图片

原文:http://www.phpall.cn/forum/read.php?tid=178

图片上传重命名好处多多,
上传的图片重新让系统自己命名,这样便于管理,上传的人多了的话,如果上传两张不同的图片,而上传者自己给他们命名的名字是一样的,那不就乱了。
   上传的图片重命名还有一个好处是,可以支持中文名称的图片上传。
   我在ci的图片上传类做了点小的改动,就可以实现图片的重命名和中文图片的上传。
代码如下:
<?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
(
    => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    => image/jpeg
    => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/
    => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    => T1CbdbXdpbdED1upjX_160x160_
    => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
    => .jpg
    => 15.06
    => 1
    => 160
    => 120
    => jpeg
    => 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
(
    => Array
      (
             => bda39e2ad316ed0fe5dd55dc80c066e7.jpg
             => image/jpeg
             => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/
             => D:/phpnow/htdocs/ci_zone/imageUpload/uploads/bda39e2ad316ed0fe5dd55dc80c066e7.jpg
             => bda39e2ad316ed0fe5dd55dc80c066e7
             => T1CbdbXdpbdED1upjX.jpg_160x160_.jpg
             => .jpg
             => 15.06
             => 1
             => 160
             => 120
             => jpeg
             => width="160" height="120"
      )
)
你会看到上传后的文件名被重新命名了。同时提交到a()函数的图片可以是中文名,
而提交到doUpload()函数的图片不能是中文名。

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

duckywang 发表于 2014-8-29 10:42:42

感谢楼主哈

Hex 发表于 2009-9-22 20:11:08

我帮楼主改了一下高亮,呵呵。

xiaoniao 发表于 2009-9-22 20:13:15

thanks hex

Hex 发表于 2009-9-22 20:26:12

哈哈,多多把 phpall 的好东西转发到 ci 中国吧 :lol

kazaff 发表于 2009-9-22 21:10:27

我没看明白啊~两个方法都是调用的CI的upload类啊~只是config不同而已~对吧?

xiaoniao 发表于 2009-9-22 23:58:53

调用的是一样的,
只是加了这几句$data = array('upload_data' => $this->upload->data());
print_r($data);
   return$data;
同时让它有个返回值而已。

kazaff 发表于 2009-9-25 12:04:32

明白了~NB~

wyh0416 发表于 2010-5-17 15:33:07

恩~~~谢谢楼主~简单易懂~:victory:

zhanglei_0202 发表于 2010-7-6 10:18:16

东西拿走了,还没看呢!~先回帖在看代码!~嘿嘿

630088892 发表于 2012-7-17 08:32:30

恩 看这么好正好我需要 先拿来用用了 先谢谢楼主了不懂我在问了 呵呵{:1_1:}
页: [1] 2
查看完整版本: 图片上传重命名 好处多多 支持中文名图片