图片服务器代码
<?php
/**
* 图片服务器上传API接口
* by Zx
* date 2016-04-28
*/
header('Content-type:text/json');
//准备参数
$size = 10485760; //图片大小 单位字节
$type = array('image/jpeg', 'image/gif', 'image/png'); //允许上传的图片类型
//验证数据完整性
if(isset($_FILES['imgs']) && isset($_POST['folder']))
{
switch($_POST['folder'])
{
case 'goods_img':
$path = 'goods_img/'.date('Y-m-d').'/';
break;
case 'goods_sku':
$path = 'goods_sku/'.date('Y-m-d').'/';
break;
default:
$path = 'default/'.date('Y-m-d').'/';
break;
}
if (!is_dir($path))
{
//第三个参数是“true”表示能创建多级目录,iconv防止中文目录乱码
mkdir(iconv("UTF-8", "GBK", $path),0777,true);
}
//开始图片上传
$result = upload($path, $size, $type);
}else{
//参数缺失
$result = array('code' => 0, 'msg' => '参数缺失');
}
echo json_encode($result);
/**
* Upload 图片上传
* @param $path 图片上传路径(一级目录)
* @param $size 图片上传大小 单位字节
* @param $type 允许上传的图片类型
* @return array code(0==上传失败, 1==上传成功) path==上传成功路径 name==上传成功图片名称
*/
function upload($path, $size, $type){
$file = $_FILES['imgs'];
if($file['error'] > 0){
switch($file['error']){
case 1:
return array('code' => 0, 'msg' => '上传文件超过PHP配置文件中 upload_max_filesize的值');
break;
case 2:
return array('code' => 0, 'msg' => '上传文件超过PHP配置文件中 post_max_size的值');
break;
case 3:
return array('code' => 0, 'msg' => '上传失败,图片数据缺损');
break;
case 4:
return array('code' => 0, 'msg' => '没有文件被上传');
break;
case 6:
return array('code' => 0, 'msg' => '上传失败,找不到临时目录');
break;
default:
return array('code' => 0, 'msg' => '未知错误');
break;
}
}
if($file['size'] > $size){
return array('code' => 0, 'msg' => '上传的图片大小超过限制的'.$size.'字节');
}
if(!in_array($file['type'], $type)){
return array('code' => 0, 'msg' => '不是正确的图片类型');
}
$suffix = strrchr($file['name'], '.');
$newName = md5(time().uniqid().mt_rand(1,999)).$suffix;
if(!file_exists($path)){
mkdir($path);
}
$path = rtrim($path, '/');
$p = $path.'/'.$newName;
if(move_uploaded_file($file['tmp_name'], $p)){
return array('code' => 1, 'msg' => '图片上传成功', 'path' => $path, 'name' => $newName);
}else{
return array('code' => 0, 'msg' => '图片上传失败');
}
}
前台代码
//上传商品图片
$('#upload_goods_img').change(function(){
//上传商品图片数量
var small_goods_img_number = $('.small_number').length
if(small_goods_img_number == 5){
error('最多上传五张图片');return;
}
$('#index').val(++small_goods_img_number);
var formData = new FormData($( "#goods_img" )[0]);
// var url = "{:U('UploadImg/uploadGoodsImg')}";
var url = "{:U('UploadImg/upload_img')}";
formData.append("img_name", "goods_img");
formData.append("folder", "goods_img");
formData.append("type", "goods_img");
$.ajax({
type:'post',
url:url,
data:formData,
cache: false,
contentType: false,
processData: false,
success:function(data){
if(data.code){
//大图
var img_url = "{:C('IMG_SERVER_URL')}";
$('#upload_goods_img_big').attr('src', img_url+data.msg.goods_img_path);
//小图
addGoodsImgSmall(data.msg);
}else{
error(data.msg);
}
}
});
});
php代码
/**
* 上传图片到服务器
* @return [type] [description]
*/
public function upload_img()
{
if(IS_POST){
$url = C('IMG_SERVER_URL').'uploadImg.php'; //图片API服务器
$data = I('post.');
$img_name = $data['img_name'];
if(!$img_name){
$ajax['msg'] = 'File名称有误';
}else{
$tmpName = $_FILES[$img_name]['name']; //上传上来的文件名
$tmpFile = $_FILES[$img_name]['tmp_name']; //上传上来的临时存储路径
$tmpType = $_FILES[$img_name]['type']; //上传上来的文件类型
$folder = $data['folder']; //存储路径
//执行上传
$obj = json_decode(upload_file($url, $tmpName, $tmpFile, $tmpType, $folder));
if($obj->code){
$path = $obj->path.'/'.$obj->name;
if($data['type'] == 'goods_img'){ //商品图片
$model = D('GoodsImg');
$goods_img_data['img_path'] = $path;
$goods_img_data['index'] = I('index');
$goods_img_data['create_time'] = time();
$goods_img_id = $model->add($goods_img_data);
if($goods_img_id){
$ajax['code'] = '1';
$ajax['msg'] = [
'id' => $goods_img_id,
'goods_img_path' => $path,
];
}else{
$ajax['msg'] = '上传失败';
}
}else if($data['type'] == 'goods_sku'){ //商品SKU
$model = D('GoodsSku');
$goods_sku_img_data['sku_img_path'] = $path;
$goods_sku_img_data['sku_distinguish'] = $data['sku_distinguish'];
$goods_sku_img_data['price'] = $data['sku_price'];
$goods_sku_img_data['create_time'] = time();
$goods_sku_img_id = $model->add($goods_sku_img_data);
if($goods_sku_img_id){
$ajax['code'] = '1';
$ajax['msg'] = [
'id' => $goods_sku_img_id,
'goods_sku_img_path' => $path,
'sku_distinguish' => $data['sku_distinguish'],
'price' => $data['sku_price']
];
}else{
$ajax['msg'] = '上传失败';
}
}
}else{
$ajax['msg'] = $obj->msg;
}
}
$this->ajaxReturn($ajax);
}
}
上传文件curl
/**
* curl上传文件
*
* @param unknown $url
* @param unknown $filename
* @param unknown $path
* @param unknown $type
*/
function upload_file($url,$filename,$path,$type, $folder){
//php 5.5以上的用法
if (class_exists('CURLFile')) {
$data = array(
'imgs' => new CURLFile(realpath($path),$type,$filename),
'folder' => $folder
);
} else {
$data = array(
'imgs'=>'@'.realpath($path).";type=".$type.";filename=".$filename,
'folder' => $folder
);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$return_data = curl_exec($ch);
$return_data = trim($return_data);
curl_close($ch);
return $return_data;
}