七牛云存储之图片的上传【PHP】

8 篇文章 0 订阅

由于七牛云存储使用了命名空间USE,命名空间是在PHP5.3才引入的,所以5.3之前的版本会报错的哦

第一、下载七牛云存储SDK对应的PHP版本

第二、解压文件(我重新命名为了qiniusdk),放到项目根目录

第三、确定上传文件的机制(HTML上传,后台上传)

第四、上传成功

详解第三步(以下代码全部与sdk同级目录):

HTML上传:

<form method="post" action="http://up.qiniu.com" enctype="multipart/form-data">
			<input name="token" type="hidden" value="<?php echo $token;?>">
			<input name="file" type="file" />
			<input type="submit" value="上传"/>
		</form> 
              $token的生成:

<?php
	require_once __DIR__ . '/qiniusdk/autoload.php';

	use Qiniu\Auth;
	use Qiniu\Storage\UploadManager;

	$accessKey = '换成你的';
	$secretKey = '换成你的';
	$auth = new Auth($accessKey, $secretKey);
	$bucket = '换成你的存储空间';
	$token = $auth->uploadToken($bucket);
?>
点击上传之后,图片直接上传至七牛

如果需要获取到文件名以及自定义文件名可以增加一个上传策略

<?php
	require_once __DIR__ . '/qiniusdk/autoload.php';
	header('Access-Control-Allow-Origin:*');
	use Qiniu\Auth;
	use Qiniu\Storage\UploadManager;

	$accessKey = 'XXX';
	$secretKey = 'YYY';
	$auth = new Auth($accessKey, $secretKey);
	$bucket = 'ZZZ';
	$newname = time().'.jpg';
	$policy = array(
		'saveKey'=>$newname,
		'callbackUrl' => 'http://WWW.sinaapp.com/qiniu/callback.php',
		'callbackBody' => "name=$(fname)&newname=$newname&toid=12"
		);
	$token =  $auth->uploadToken($bucket,NULL, 3600, $policy);
?>

通过 地址回调获取参数,将id为12的用户头像的图片设置为$newname

callback.php

<?php
$callbackBody = file_get_contents('php://input');
//$callbackBodys = base64_encode(serialize($callbackBody));
$mysql = new SaeMysql();
$sql = "ddd";
$mysql->runSql($sql);
ECHO '{"success":true}';
exit;

至此一个通过html直接上传到七牛的小功能就实现了;

PHP上传BASE64:

$accessKey = '58Lg-AxchuJG3Hr4UjgwWmL5LGJdlePRdn6666';
		$secretKey = 'Hr47oR6Tdv-AMMvDrgdkuoYdiDScarRD7777';
		$bucket = 'melvita';
		$auth = new Auth($accessKey, $secretKey);
		$upToken = $auth->uploadToken($bucket);
		$rand = rand(1111,9999);
		$now = time();
		$name = 'melvita/'.$now.$rand;
		$bodyKey = base64_encode($name);
		
		$str= isset($_POST['imgstr'])?$_POST['imgstr']:false;//图片BASE64
		if($str){
			$qiniu = phpCurlImg("http://up-z1.qiniu.com/putb64/-1/key/".$bodyKey,$str,$upToken);
			$qiniuArr = json_decode($qiniu,true);
			if($qiniuArr['key']==$name){
				setcookie('qiniuImg',$name,time()+1000);
				$return['info']['code'] = 'S001';
				$return['data']['name'] = '_286f67d5b83550bfed5b1ce8b3af0c63';
				$return['data']['type'] = 'jpg';
				$return['data']['filename'] = 'http://oog4uis9x.bkt.clouddn.com/'.$name;
				$return['msg'] = '提交成功';
			}else{
				$return['status'] = 0;
				$return['msg'] = '上传失败';
			}
		}else{
			$return['status'] = 0;
			$return['msg'] = '参数不全';
		}

function phpCurlImg($remote_server,$post_string,$upToken) {  
		$headers = array();
		$headers[] = 'Content-Type:image/png';
		$headers[] = 'Authorization:UpToken '.$upToken;
		$ch = curl_init();  
		curl_setopt($ch, CURLOPT_URL,$remote_server);  
		//curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_HTTPHEADER ,$headers);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
		//curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		$data = curl_exec($ch);  
		curl_close($ch);  
		return $data;  
	}



JS上传BASE64:

前端给我的图片格式是base64:data:image/png;base64,iVBORw....一系列base64编码,发现七牛有一个上地址 可以直接上传,单需要把字符"base64,"及其之前的字符都去掉,方法如下

var pic = 'iVBORw0KGgoAAAANSUh...';//图片base64编码
var url = "http://up.qiniu.com/putb64/-1/key/YWJj"; //YWJj为图片名base64编码
	$(document).ready(function(){
		$("#putb").click(function(){
			$.ajax({
				type: "POST",
				url: url,
				data: pic,
				headers: {'Content-Type': 'application/octet-stream','Authorization': 'UpToken <?php echo $upToken?>'},
				success:function(result){
					 console.log(msg);
				}
			});

		});
	});
//原始JS写的AJAX
var url = "http://up.qiniu.com/putb64/-1/key/YWJj"; 
	var xhr = new XMLHttpRequest();
	var xhrget = new XMLHttpRequest();
	var obj;
	xhr.onreadystatechange=function(){
		if (xhr.readyState==4){
			console.log(xhr.responseText);
		}
	}
 
	xhr.open("POST", url, true); 
	xhr.setRequestHeader("Content-Type", "application/octet-stream"); 
	xhr.setRequestHeader("Authorization", "UpToken <?php echo $upToken?>"); 
	xhr.send(pic);



后台上传:

感觉绕来绕去的还是比较麻烦,索性后台直接调用接口直接上传,这里需要用到七牛SDK中UploadManager的一个新方法putFile

<?php
require_once __DIR__ . '/qiniusdk/autoload.php';

use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

$accessKey = 'XX';
$secretKey = 'YY';
$auth = new Auth($accessKey, $secretKey);
$bucket = 'ZZ';
$token = $auth->uploadToken($bucket);

$uploadMgr = new UploadManager();
//print_r($_FILES['file']['tmp_name']);exit;
$filePath = $_FILES['file']['tmp_name'];//'./php-logo.png';
$key = 'php-logo.png';
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
echo "\n====> putFile result: \n";
if ($err !== null) {
    var_dump($err);
} else {
    var_dump($ret);
}

html和上面的写法一样,只不过action地址改为自己的就可以了

七牛上传源码:https://github.com/rwifeng/qiniudocs/tree/master/demo/simpleuploader

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值