layui结合阿里云OSS实现图片上传

场景:微信用户图片上传使用第三方阿里云存储,方便系统的运行和节省系统的空间

1.购买阿里云OSS服务,详情请查看我的另外一篇博客

2.layui前端代码

<tr>
    <td class="">奖品图片:</td>
    <td class="">
        <div id="picture_path_upload">
            <input type="hidden" value="<?php echo $_result['prize']['img_src'];?>" name="img_src" id="img_src">
        </div>
        <div id="picture_path_pic">
            <img src="<?php echo $_result['prize']['img_src'];?>" width="100px" alt=""/>
        </div>
        <span>建议尺寸640*640</span>
    </td>
</tr>
//js代码
<script type="text/javascript" src="<?php echo CDNURL;?>/source/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
<script type="text/javascript" src="<?php echo CDNURL;?>/source/admin/lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="<?php echo CDNURL;?>/source/admin/lib/laypage/1.2/laypage.js"></script>
<script type="text/javascript" src="<?php echo CDNURL;?>/source/admin/lib/jquery.validation/1.14.0/jquery.validate.js"></script>
<script type="text/javascript" src="<?php echo CDNURL;?>/source/common/uploadify/jquery.Huploadify.js"></script>
<script type="text/javascript">
    function article_save()
    {
        alert("刷新父级的时候会自动关闭弹层。");
        window.parent.location.reload();
    }

    $(function(){

        $("#prize_type").change(function()
        {
            if ($(this).val()==4)
            {
                $("#coupon_type").show();
            }else
            {
                $("#coupon_type").hide();
            }
        })

        $("#checkform").validate({
            rules:{
                prize_tag: {
                    required:true
                },
                prize_type: {
                    required:true
                },
                prize_point: {
                    number:true
                },
                prize_count: {
                    number:true
                }
            },
            messages:{
                prize_tag:{
                    required:"请输入奖品名称"
                },
                prize_type: {
                    required:"请输入奖品类型"
                },
                prize_point: {
                    number:"积分必须为数字"
                },
                prize_count: {
                    number:"数量必须为数字"
                }
            }
        })


        $('#picture_path_upload').Huploadify({
            auto:true,
            fileTypeExts:'*.jpg;*.png',
            multi:true,
            formData:{key:123456,key2:'vvvv'},
            fileSizeLimit:9999,
            showUploadedPercent:true,//是否实时显示上传的百分比,如20%
            showUploadedSize:true,
            removeTimeout:9999999,
            uploader:'?mod=admin&v_mod=upload&_action=ActionLoadUpload',
            onUploadStart:function(){
                //alert('开始上传');
            },
            onInit:function(){
                //alert('初始化');
            },
            onUploadComplete:function(){
                //alert('上传完成');
            },
            onDelete:function(file){
                console.log('删除的文件:'+file);
                console.log(file);
            },
            'onUploadSuccess':function(file,res,response)
            {
                var result = $.parseJSON(res);
                layer.msg(result.msg, {icon:result.code==0?6:5,time:1000});
                if(result.code==0)
                {
                    $("#img_src").val(result.file);
                    $("#picture_path_pic").empty();
                    $("#picture_path_pic").append('<img src="'+result.file+'" width="100" height="100" class="thumbnail"/>')
                }
            }
        });

    });

    <?php
    if(isset($_return))
    {
    ?>
    alert('<?php echo $_return['msg']; ?>');
    if('<?php echo $_return['code']?>'==0)
    {
        //var index = parent.layer.getFrameIndex(window.name);
        //parent.layer.close(index);
    }
    <?php
    }
    ?>
</script>

后端处理代码

1.引入相应的OSS工具sdk

<?php
namespace Ry\ykl\admin\Action;
use Ry\ykl\admin\upload;
defined('SAVE_IMG_LARGER') or define('SAVE_IMG_LARGER','upload/larger');  //阿里云上面的OSS路径
require_once RPC_DIR  . '/tool/oss/index/oss_Common.php';  //引入OSS工具sdk
use oss_Common;
class UploadAction extends upload
{
    function __construct($data)
    {
        parent::__construct($data);
    }

    //更新图片
    public function upload_pic($files,$tosrc,$web)
    {
        //支持的图片类型
        $imageArray = array('image/gif','image/gif', 'image/jpeg', 'image/png', 'image/bmp');
        if (is_uploaded_file($files['tmp_name']))
        {
            if($files['error']== 0 &&
                $files['size'] > 0 &&
                $files['size'] < 100 * 1024 * 1024)
            {
                $extArray = explode('.',$files['name']);
                $fileExt = $extArray[count($extArray) -1];
                $filename = md5(time()) .rand(11,99). '.' . $fileExt;
                //$filename此处随机文件名
                if(move_uploaded_file($files['tmp_name'], $tosrc.$filename))
                {
                    //成功,返回完整的图片地址
                    return  $web.$filename;
                }
                return false;
            }
            return false;
        }
        return false;
    }


    //执行上传
    public function ActionLoadUpload()
    {
        if(!isset($_FILES['file']) || empty($_FILES['file']['tmp_name']) || $_FILES['file']['error']!=0)
        {
            return array('code'=>1,'msg'=>'请选择正确的图片');
        }

        oss_Common::createBucket();
//        return['code'=>0,'msg'=>'y'];
        $bucketName = oss_Common::getBucketName();
        $ossClient = oss_Common::getOssClient();
        $filePath = __FILE__;
        $_return=$ossClient->uploadFile($bucketName,SAVE_IMG_LARGER.'/games_wheel/'.time().'.png',$_FILES['file']['tmp_name']);
        $file='';
        if (!empty($_return['oss-request-url']))
        {
            //正则表达式
            $reg = '/(http):\/\/([^\/]+)/i';
            preg_match($reg,$_return['oss-request-url'],$res);
            $file=preg_replace($reg,SOURCE_URL,$_return['oss-request-url']);
        }
        if($file=='')
        {
            return array('code'=>1,'msg'=>'上传失败');
        }
        return array('code'=>0,'msg'=>'上传成功','file'=>$file);
    }

    protected function uploadFile()
    {
        //表单上传
        if (!is_uploaded_file($_FILES['file']['tmp_name'])){
            return array('code'=>1,'msg'=>'上传内容为空');
        }
        $allow_type = array('image/gif', 'image/gif','image/jpg', 'image/jpeg', 'image/png', 'image/bmp');
        if (!isset($_FILES['file']['type']) || !in_array(strtolower($_FILES['file']['type']),$allow_type)){
            return array('code'=>1,'msg'=>'上传类型不合法,'.$_FILES['file']['type']);
        }
        if ($_FILES['file']['error'] > 0 || $_FILES['file']['size'] > 1024 * 1024 * 5){
            return array('code'=>1,'msg'=>'图片错误或者超过5M大小');
        }
        if (empty($this->data['file_dir'])){
            return ReturnError('上传路径错误');
        }
        $oss_path = SAVE_IMG_LARGER.'/'.trim($this->data['file_dir']).'/'.md5($_FILES['file']['name']).'.png';
        return $this->saveToOss($_FILES['file']['tmp_name'],$oss_path);
    }

    /**
     * 上传文件到OSS存储
     * @param $source :本地文件,如$_FILES['file']['tmp_name']
     * @param $toPath :阿里云oss保存的位置,地址开头不能带有‘/’,正确路径:“img/abc/xxx.jpg”
     * @return array
     */
    private function saveToOss($source_file,$toOssPath)
    {
        oss_Common::createBucket();
        $bucketName = oss_Common::getBucketName();
        $ossClient = oss_Common::getOssClient();
        $_return=$ossClient->uploadFile($bucketName,$toOssPath,$source_file);
        $file='';
        if (!empty($_return['oss-request-url'])){
            //正则表达式
            $reg = '/(http):\/\/([^\/]+)/i';
            preg_match($reg,$_return['oss-request-url'],$res);
            $file = preg_replace($reg,SOURCE_URL,$_return['oss-request-url']);
        }
        if(empty($file)){
            return array('code'=>1,'msg'=>'上传失败');
        }
        return array('code'=>0,'msg'=>'上传成功','url'=>$file);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值