又拍云存储使用记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32281471/article/details/52673092

引:图片云存储,选择了又拍云,初次看api文档感觉有点乱啊,到网上找了各种资料之后,经过各种尝试,基本摸清了原理。


一、图片上传有两种方式:

  1. 第一种是先上传到自己的服务器然后再上传到又拍云(适用于对图片有比较特殊的处理的场景)
  2. 第二种是直接上传到又拍云

二、准备:
申请账号,分配操作员就不说了,直接进入主题,新建服务,
服务名称根据自己的需要随意创建,然后选择原站类型又拍云,授权已经创建的操作员

这样最基本的就创建完成了。如果想用自己的域名,只要按着走就可以了。

最基本的创建步骤就完成了,你就可以着手上传文件到又拍了。
三、上传操作
方法一:***********先上传文件到自己的服务器,上传到自己的服务器的过程就省略了
我用的是php,下载官方的sdk,下载相应的sdk, 点击打开链接,以php为例,用Thinkphp,把文件放到Vendor目录下面的Upyun下面,Upyun/upyun.class.php
然后自己在Common/function.php 里面创建函数:
   
    /**
    *$savepath 图片又拍云上面保存的路径包括文件名
    *$imagepath 图片在本地服务器上的路径,TP是用'./'相对于根路径
    */
    function upload($savepath, $imagepath) {
	vendor('Upyun.upyun#class');
	$upyun = new \UpYun('你的bucket名,即服务名', '操作员', '操作员的密码');
	$fh = fopen($imagepath, 'r');
	//图片上传要变成资源类型的才能上传成功
	//如果不是资源类型的,那么将会以文本的形式上传,但是却以图片的形式命名后缀,导致问题
	
	$uploadResult = $upyun->writeFile($savepath, $fh);
	fclose($fh);
     }
          这 
  就可以把自己服务器上面的文件上传到又拍云了。 
 
方法二:**********直接通过表单上传到又拍云
这个稍微复杂一点,涉及到签名
具体参考文档 又拍云http form api 文档
准备开始:
先从后台写起:
// (回调中的所有信息均为 UTF-8 编码,签名验证的时候需要注意编码是否一致)
    	$keyArr = array();
    	$keyArr['bucketname'] = '你的bucket名';
    	$form_api_secret = '系统分配的api密钥'<span style="font-family: Arial, Helvetica, sans-serif;">;		            		    // 表单 API 功能的密匙</span>
    	
    	$options = array();
    	$options['bucket'] = $keyArr['bucketname']; 					   	// 空间名
    	$options['expiration'] = time() + 3600;        						// 授权过期时间,一天
    	$options['save-key'] = '/pic/{year}{mon}{day}{hour}{min}{sec}{filemd5}{.suffix}';//图片的保存方式
    	$options['allow-file-type'] = 'jpg,png,gif,bmp.jpeg';  				//允许上传的图片类型
    	$options['ext-param'] = json_encode(array(
    			//用来进行数据写入的依据,可以写入一些认证信息
    	));
    	//图片大小
    	$options['content-length-range'] = '1000, 2048000';					//图片的大小,1k到2M
    	//实际就是post,把数据post的地址
    	$options['notify-url'] = 'http://localhost/****'; 				// 服务端异步回调地址post
//     	$options['return-url'] = 'http://localhost/****';				    // 服务端同步回调地址get
    	
    	$keyArr['policy'] = base64_encode(json_encode($options));			//生成policy
    	$keyArr['signature'] = md5($keyArr['policy'].'&'.$form_api_secret); //生成signature
    	
    	$this->assign('upyunparam', $keyArr);


后台要处理两个东西:policy和signature。需要一个form api 的密钥,点击开启即可获得
后台要处理的数据在上面,处理好之后,assign到模版里面
模版里面最基本的几个组件
        <form action="http://v0.api.upyun.com/{$upyunparam['bucketname']}/" method="post" enctype="Multipart/form-data"> 
	    <input type="hidden" name="policy" value="{$upyunparam['policy']}"> 
	    <input type="hidden" name="signature" value="{$upyunparam['signature']}"> 
	    <input type="file" name="file"> 
            <input type="submit" value="upload"> 
	</form>
完毕,上传文件即可。
policy和signature原理:policy用来告诉又拍云服务器要上传的文件的一些基本验证信息,而signature就是为了防止policy被篡改,因为md5之后,policy一旦被更改就会                   无法验证通过
 

猜你喜欢

转载自blog.csdn.net/qq_32281471/article/details/52673092
今日推荐