<?php
//函数库
function gmt_iso8601($time) {
$dtStr = date("c", $time);
$mydatetime = new DateTime($dtStr);
$expiration = $mydatetime->format(DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
function oss_qianming(){
$id= 'XXX';
$key= 'XXX';
$host = 'http://XXX.oss-cn-beijing.aliyuncs.com';
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问
$end = $now + $expire;
$expiration = gmt_iso8601($end);
$dir = 'upload/'. date("Ymd",time()) .'/';
//最大文件大小.用户可以自己设置
$condition = array(0=>'content-length-range', 1=>0, 2=>1048576000);
$conditions[] = $condition;
//表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
$start = array(0=>'starts-with', 1=>'$key', 2=>$dir);
$conditions[] = $start;
$arr = array('expiration'=>$expiration,'conditions'=>$conditions);
//echo json_encode($arr);
//return;
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = array();
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
//这个参数是设置用户上传指定的前缀
$response['dir'] = $dir;
return $response;
}
//控制器
public function edit($id)
{
$taoxi = $this->taoxi_model->find($id);
$oss_qianming = oss_qianming();
return $this->fetch('edit', ['taoxi' => $taoxi, 'oss_qianming' => $oss_qianming]);
}
?>
<!--
edit.html
-->
<div class="layui-form-item">
<label class="layui-form-label">套系视频</label>
<div class="layui-input-block">
<input type="text" name="video" value="{$taoxi.video}" class="layui-input">
</div>
<div class="layui-input-block">
<a id="up_video_box_file" href="javascript:void(0);" class='layui-btn'>选择文件</a>
<div id="up_video_box_msg" style="line-height:40px;"></div>
</div>
</div>
<script>
var policy = '{$oss_qianming.policy}';
var signature = '{$oss_qianming.signature}';
var dir = '{$oss_qianming.dir}';
oss_zhichuan('up_audio_box_file','up_audio_box_msg','audio');
accessid= 'XXX';
host = 'http://XXX.oss-cn-beijing.aliyuncs.com';
/**
* OSS直传
* @param file_btn 上传按钮
* @param msg 上传文件信息
* @param file_ipt 储存上传文件path的input
* @return
*/
function oss_zhichuan(file_btn,msg_div,file_ipt)
{
var uploader = new plupload.Uploader({
runtimes : 'html5,flash,silverlight,html4',
browse_button : file_btn,
flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
multi_selection : false,//设置不允许一次上传多个
url : host,
multipart_params: {
'Filename': '${filename}',
'key' : dir+'${filename}',
'policy': policy,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
'signature': signature,
},
init: {
FilesAdded: function(up, files) {
plupload.each(files, function(file) {
//document.getElementById('ossfile').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
//+'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
//+'</div>';
document.getElementById(msg_div).innerHTML = '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
+'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
+'</div>';
previewImage(file,function(imgsrc){
$('#'+file.id).append('<img src="'+ imgsrc +'" />');
})
});
uploader.start();
},
UploadProgress: function(up, file) {
var d = document.getElementById(file.id);
d.getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
var prog = d.getElementsByTagName('div')[0];
var progBar = prog.getElementsByTagName('div')[0]
progBar.style.width= 2*file.percent+'px';
progBar.setAttribute('aria-valuenow', file.percent);
},
FileUploaded: function(up, file, info) {
if (info.status >= 200 || info.status < 200)
{
document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '上传成功!';
var name = dir+file.name;
$("input[name='"+file_ipt+"']").val(name);
}
else
{
document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response;
}
},
Error: function(up, err) {
document.getElementById('console').appendChild(document.createTextNode("\nError xml:" + err.response));
}
}
});
uploader.init();
}
//plupload中为我们提供了mOxie对象
//有关mOxie的介绍和说明请看:https://github.com/moxiecode/moxie/wiki/API
//如果你不想了解那么多的话,那就照抄本示例的代码来得到预览的图片吧
function previewImage(file,callback){//file为plupload事件监听函数参数中的file对象,callback为预览图片准备完成的回调函数
if(!file || !/image\//.test(file.type)) return; //确保文件是图片
if(file.type=='image/gif'){//gif使用FileReader进行预览,因为mOxie.Image只支持jpg和png
var fr = new mOxie.FileReader();
fr.onload = function(){
callback(fr.result);
fr.destroy();
fr = null;
}
fr.readAsDataURL(file.getSource());
}else{
var preloader = new mOxie.Image();
preloader.onload = function() {
preloader.downsize( 300, 300 );//先压缩一下要预览的图片,宽300,高300
var imgsrc = preloader.type=='image/jpeg' ? preloader.getAsDataURL('image/jpeg',80) : preloader.getAsDataURL(); //得到图片src,实质为一个base64编码的数据
callback && callback(imgsrc); //callback传入的参数为预览图片的url
preloader.destroy();
preloader = null;
};
preloader.load( file.getSource() );
}
}
</script>
thinkphp OSS服务器签名直传
最新推荐文章于 2024-06-24 18:11:04 发布