首先是一个很好用的js插件,可以用ajax上传图片,插件在上传附件中,js代码如下
//#login-form是formID,popupWin是提示框
$("#login-form").ajaxSubmit({
url:"__APP__/Index/eidtEnroll",
type:'post',
success:function(json){
//console.log(json);
json=eval('('+json+')');
if(json.imgstate=='fail'){
popupWin(json.msg+'图片上传失败');
}else{
popupWin(json.msg);
}
if(json.error=='ok'){
setTimeout(function(){window.location.href="__APP__/Index/index.html?id="+json.data.id},1500);
}
}
});然后是php处理图片的代码:if($_FILES){//图片上传处理
//var_dump($_POST);exit;
$upload=new \Think\Upload();
$upload->mimes=array("image/jpeg","image/png","image/gif");
$upload->maxSize=5000000;
$upload->autoSub=false;
$upload->rootPath="./public/upload/enroll/";
$re=$upload->upload($_FILES);
if($re){
$image = new \Think\Image();
//var_dump($re);exit;
foreach($re as $k=>$v){
//如果上传多张图片,$k 为数字,只有一张$k为input的name名字
$img='./public/upload/enroll/'.$v['savename'];
//$data['list_student']是汉字,
//上传的图片保存在enroll文件夹中,处理后保存在enroll/mini中,并删除原图片
$newname='mini/'.$data['list_student'].'+'.$data['list_card'].'.jpg';
$newimg='./public/upload/enroll/'.$newname;
$image->open($img);
//IMAGE_THUMB_FIXED 固定长宽
$image->thumb(96, 136,\Think\Image::IMAGE_THUMB_FIXED)->save($newimg);
//删除原图片
@unlink("./public/upload/enroll/{$v['savename']}");
$data['list_img']=$newname;
}
}else{
$return['imgstate']='fail';
}
}else{
$return['imgstate']='no';
}上传后,数据库保存的正常,但是实际图片名字乱码,百度一下后,找到一个解决方法:上传文件乱码问题:在ThinkPHP\Library\Think\Upload\Driver\Local.class.php中修改:
// if (!move_uploaded_file($file['tmp_name'], $filename)) {
if (!move_uploaded_file($file['tmp_name'], iconv('utf-8','gb2312',$filename))){
$this->error = '文件上传保存错误!';
return false;
}而我是图片保存问题:ThinkPHP\Library\Think\Image\Driver\Gd.class.php,Image()方法,它引入了Gd.class.php,所以到该文件中找,修改后://保存图像
if('gif' == $type && !empty($this->gif)){
// $this->gif->save($imgname);
$this->gif->save(iconv('utf-8','gb2312',$imgname));
} else {
$fun = "image{$type}";
//$fun($this->img, $imgname);
$fun($this->img, iconv('utf-8','gb2312',$imgname));
}原理应该是保存图片编码由utf-8转变为gb2312,然后试了可以
jquery.form.zip
( 11.77 KB 下载:2 次 )
