zoukankan      html  css  js  c++  java
  • php把 图片上传到 图片服务器

    图片服务器代码

    <?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;  
    }
  • 相关阅读:
    SharePoint 疑难杂症之加载控件TaxonomyPicker.ascx失败及其解决方法
    SQL Server、Oracle、db2所提供的简装版(Express)比较
    试水Windows 8 Metro application(xaml)及我的一些理解
    基于OAuth实现的Windows Live Writer新浪微博插件
    fmplan主页功能设计第一阶段成果
    MVC3课程中的几个问题整理
    【十五分钟Talkshow】为什么新浪微博的输入文本框具有记忆功能
    参照WPF实现Silverlight中的多值绑定特性
    MVVM、MVVMLight、MVVMLight Toolkit之我见
    面向服务的RIA应用系统开发中的异常处理
  • 原文地址:https://www.cnblogs.com/zjj1990/p/8901911.html
Copyright © 2011-2022 走看看