阿里云 OSS 对象存储 OSS 图片加文字水印

阿里云 OSS 对象存储

  • 实际开发需先阅读 阿里云 [OSS快速入门文档](https://help.aliyun.com/document_detail/31883.html?spm=5176.208357.1107607.14.7f06390fo9yUNT)
    • 开通服务无实际操作难度,PASS
    • 创建存储空间
      • 获取 Access Key
      • 若开通编程访问,请及时保存AccessKey 信息,页面关闭后将无法再次获取信息。
    • 搞好之后就 [下载SDK](https://help.aliyun.com/document_detail/85580.html?spm=a2c4g.11186623.6.799.7a1df55boh0XHl#h2-url-2) 开始开发
      • 将文件放入项目目录
      • 编写公共函数 方便直接调用
        • 以下代码均手动编写,可根据自己的实际情况重新编写(参考 [官方文档](https://help.aliyun.com/document_detail/32100.html?spm=a2c4g.11186623.6.801.79b933bcKdMAfT) 即可)
          • OSS 公共配置
          • OSS 报错抛出
          • OSS 上传
            • 上传成功文件都在此目录下
          • OSS 删除文件
          • OSS 图片加文字水印
  • 总结 : OSS存储(基础)没什么技术难点 ,我们项目只需要用到文件的简单存、读、删,图片的文字水印 。参照 [官方文档](https://help.aliyun.com/document_detail/32100.html?spm=a2c4g.11186623.6.801.79b933bcKdMAfT) 开发即可;

实际开发需先阅读 阿里云 OSS快速入门文档

阿里云 OSS 对象存储 OSS 图片加文字水印_第1张图片

开通服务无实际操作难度,PASS

阿里云 OSS 对象存储 OSS 图片加文字水印_第2张图片

创建存储空间

阿里云 OSS 对象存储 OSS 图片加文字水印_第3张图片

获取 Access Key

阿里云 OSS 对象存储 OSS 图片加文字水印_第4张图片
阿里云 OSS 对象存储 OSS 图片加文字水印_第5张图片
在这里插入图片描述
阿里云 OSS 对象存储 OSS 图片加文字水印_第6张图片

阿里云 OSS 对象存储 OSS 图片加文字水印_第7张图片阿里云 OSS 对象存储 OSS 图片加文字水印_第8张图片

若开通编程访问,请及时保存AccessKey 信息,页面关闭后将无法再次获取信息。

这两个东西要复制出来 要用的

阿里云 OSS 对象存储 OSS 图片加文字水印_第9张图片

搞好之后就 下载SDK 开始开发

阿里云 OSS 对象存储 OSS 图片加文字水印_第10张图片

将文件放入项目目录

文件已给好命名空间

阿里云 OSS 对象存储 OSS 图片加文字水印_第11张图片

编写公共函数 方便直接调用

阿里云 OSS 对象存储 OSS 图片加文字水印_第12张图片

以下代码均手动编写,可根据自己的实际情况重新编写(参考 官方文档 即可)

OSS 公共配置
	if (!function_exists('file_oss_ini')) {
	    /***
	     * OSS配置
	     * @author  tangshuai
	     * @date    2019.5.29
	     * @return OssClient
	     * @throws OssException
	     */
	    function file_oss_ini(){
	        $accessKeyId = "" ;
	        $accessKeySecret = "";
	        // Endpoint以杭州为例,其它Region请按实际情况填写。
	        $endpoint = "oss-cn-hangzhou.aliyuncs.com";
	        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
	        return $ossClient;
	    }
	}
OSS 报错抛出
	if (!function_exists('oss_error')) {
	    /***
	     * @author  tangshuai
	     * @date    2019.5.30
	     * @param string $function  必传  文件名
	     * @param string $cont      必传  错误信息
	     * @param string $bucket    选填  储存空间 默认 shjzsj
	     * @throws OssException     异常抛出
	     */
	    function oss_error($function='', $cont='', $bucket='shjzsj'){
	        $ini = file_oss_ini();
	        $file_path = date('Ymd');
	        $file_name = date('His');
	        $log = 'log/'.$file_path.'/'.$file_name.'.log';
	        $content = $function . ' => '. $cont;
	        $ini->putObject($bucket, $log, $content);
	    }
	}
OSS 上传
	if (!function_exists('oss_upload')) {
	    /***
	     * OSS上传
	     * @author  tangshuai
	     * @date    2019.5.29
	     * @param string $file      必传  文件名         从 upload/ 之后开始写
	     * @param string $type_     必传  文件分类        ['user', 'data', 'goods', 'shop']
	     * @param string $path      选填  前后端文件归总   默认前端 ['home', 'admin']
	     * @param string $bucket    选填  储存空间        默认 shjzsj
	     * @return string           返回  JSON
	     * @throws OssException     异常抛出
	     */
	    function oss_upload($file='', $type_, $path='home', $bucket="shjzsj"){
	        $path_arr = ['home', 'admin'];
	        $type_arr = ['user', 'data', 'goods', 'shop'];
	        if ( !in_array($path, $path_arr) ){
	            return returnJson(0, '路径参数 异常!', 'error');
	        }
	
	        if ( is_array($type_) ) {
	            $type = $type_['0'];
	            $file_path = $type_['1'];
	        }else{
	            $type = $type_;
	            $file_path = date('Ymd');
	        }
	
	        if ( !in_array($type, $type_arr) ){
	            return returnJson(0, '分类参数 异常!', 'error');
	        }
	
	        if ($file == ''){
	            return returnJson(0, '文件参数 异常!', 'error');
	        }
	
	        $suffix =  substr($file,strrpos($file,'.'));
	        // 重命名
	        $file_name = date('His').rand(0000, 9999).md5(rand(0000, 9999)).$suffix;
	        $filePath = WEB_ROOT . "upload/" . $file;
	        $object = $path . '/' . $type . '/' . $file_path . '/' . $file_name;
	
	        $ini = file_oss_ini();
	        try {
	            $res = $ini->uploadFile($bucket, $object, $filePath);
	            if ($res['info']['http_code'] == 200 ){
	                // 返回成功
	                unlink($filePath);
	                return returnJson(1, $res['info']['url'], 'success');
	            }else{
	                oss_error('UPLOAD', 'http_code : '.$res['info']['http_code']);
	                return returnJson(0, 'http_code: '. $res['info']['http_code'], 'error');
	            }
	        } catch (OssException $e) {
	            oss_error('UPLOAD', $e->getMessage());
	            return returnJson(0, $e->getMessage(), 'error');
	        }
	    }
	}
上传成功文件都在此目录下

阿里云 OSS 对象存储 OSS 图片加文字水印_第13张图片

OSS 删除文件
	if (!function_exists('oss_delete')) {
	    /***
	     * OSS删除
	     * @author  tangshuai
	     * @date    2019.5.29
	     * @param string $file      必传  文件名
	     * @param string $bucket    选填  储存空间 默认 shjzsj
	     * @return string           返回  JSON
	     * @throws OssException     异常抛出
	     */
	    function oss_delete($file='', $bucket="shjzsj"){
	        if ($file == ''){
	            return returnJson(0, '文件不存在!', 'error');
	        }
	        $left = 'http:\/\/shjzsj.oss-cn-hangzhou.aliyuncs.com\/';
	        $file = str_replace($left,"", $file);
	
	        $ini = file_oss_ini();
	        try{
	            $res = $ini->deleteObject($bucket, $file);
	            $code = $res['info']['http_code'];
	            if ($code == 200){
	                return returnJson(1, 'success', 'success');
	            }else{
	                oss_error('DELETE', 'http_code : '.$code);
	                return returnJson(0, 'http_code : '.$code, 'error');
	            }
	        } catch(OssException $e) {
	            oss_error('DELETE', $e->getMessage());
	            return returnJson(0, $e->getMessage(), 'error');
	        }
	    }
	}
OSS 图片加文字水印
	if (!function_exists('oss_watermark')) {
	    /***
	     * OSS 图片添加 文字水印
	     * @author  tangshuai
	     * @date    2019.5.29
	     * @param string $img   必传  文件名
	     * @param string $type  必传  文件分类        ['user', 'data', 'goods', 'shop']
	     * @param string $path  选填  前后端文件归总   默认前端 ['home', 'admin']
	     * @param string $text  选填  水印文字        默认前端 'www.jzsj.com 建筑设计网'
	     * @return string       返回  JSON
	     * @throws OssException 异常抛出
	     */
	    function oss_watermark($img='', $type='', $path='home', $text='www.jzsj.com 建筑设计网'){
	        if ($img == ''){
	            return returnJson(0, '参1不可为空!', 'error');
	        }
	        if ($type == ''){
	            return returnJson(0, '参2不可为空!', 'error');
	        }
	        // 表示文字水印的文字内容(必须编码)
	        $str = base64_encode($text);
	
	        // 表示文字水印的文字类型(必须编码)
	        $font_type = 'ZmFuZ3poZW5naGVpdGk=';
	
	        $param = '?x-oss-process=image/watermark,type_'.$font_type.
	            ',text_'.$str.',t_70,color_ffffff,size_30';
	
	        $suffix = substr($img,strrpos($img,'.'));
	
	        $image = $img.$param;
	
	        $get = file_get_contents($image);
	        file_put_contents(WEB_ROOT . "upload/tmp".$suffix, $get);
	
	        $img_name = "tmp".$suffix;
	        return oss_upload($img_name, $type, $path);
	    }
	}

总结 : OSS存储(基础)没什么技术难点 ,我们项目只需要用到文件的简单存、读、删,图片的文字水印 。参照 官方文档 开发即可;

你可能感兴趣的:(tp5,OSS云存储)