|
原文: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函数
方便大家对比。 |
评分
-
查看全部评分
|