OSS Token
<h5>接口描述</h5>
<ul>
<li>获取阿里云OSS Token,用于前端直传文件使用</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>/api/auth/oss/token</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>GET</li>
</ul>
<h5>请求头部</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Authorization</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>JWT token</td>
</tr>
</tbody>
</table>
<h5>返回参数</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必含</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">accessid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>accessid</td>
</tr>
<tr>
<td style="text-align: left;">host</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>host</td>
</tr>
<tr>
<td style="text-align: left;">policy</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>policy</td>
</tr>
<tr>
<td style="text-align: left;">signature</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>signature</td>
</tr>
<tr>
<td style="text-align: left;">expire</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">int</td>
<td>expire</td>
</tr>
<tr>
<td style="text-align: left;">callback</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>callback</td>
</tr>
<tr>
<td style="text-align: left;">callback-var</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>callback-var</td>
</tr>
<tr>
<td style="text-align: left;">dir</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>dir</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<ul>
<li>状态码 200 请求成功</li>
</ul>
<pre><code>{
"accessid": "C4jYcNjUFLSKHToP",
"host": "http:/laravel_shop_api.luwnto.oss-cn-beijing.aliyuncs.com/",
"policy": "eyJleHBpcmF0aW9uIjoiMjAyMC0xMi0yM1QwMToyMzo1OFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIiJdXX0=",
"signature": "Vx3jPcUQXVQ7rKSJvYRHyYCS5pA=",
"expire": 1608686638,
"callback": "eyJjYWxsYmFja1VybCI6IiIsImNhbGxiYWNrQm9keSI6ImJ1Y2tldD0ke2J1Y2tldH0mZXRhZz0ke2V0YWd9JmZpbGVuYW1lPSR7b2JqZWN0fSZzaXplPSR7c2l6ZX0mbWltZVR5cGU9JHttaW1lVHlwZX0maGVpZ2h0PSR7aW1hZ2VJbmZvLmhlaWdodH0md2lkdGg9JHtpbWFnZUluZm8ud2lkdGh9JmZvcm1hdD0ke2ltYWdlSW5mby5mb3JtYXR9IiwiY2FsbGJhY2tCb2R5VHlwZSI6ImFwcGxpY2F0aW9uXC94LXd3dy1mb3JtLXVybGVuY29kZWQifQ==",
"callback-var": [],
"dir": ""
}</code></pre>
<h5>前端直传示例</h5>
<p><a href="https://luwnto.●●●●●●s.com/iFpQSjmgecd">Demo下载地址</a></p>
<pre><code>g_dirname = ''
g_object_name = ''
g_object_name_type = ''
now = timestamp = Date.parse(new Date()) / 1000;
function check_object_radio() {
var tt = document.getElementsByName('myradio');
for (var i = 0; i < tt.length ; i++ )
{
if(tt[i].checked)
{
g_object_name_type = tt[i].value;
break;
}
}
}
function get_dirname()
{
dir = document.getElementById("dirname").value;
if (dir != '' && dir.indexOf('/') != dir.length - 1)
{
dir = dir + '/'
}
//alert(dir)
g_dirname = dir
}
function random_string(len) {
len = len || 32;
var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var maxPos = chars.length;
var pwd = '';
for (i = 0; i < len; i++) {
pwd += chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
function get_suffix(filename) {
pos = filename.lastIndexOf('.')
suffix = ''
if (pos != -1) {
suffix = filename.substring(pos)
}
return suffix;
}
function calculate_object_name(filename)
{
if (g_object_name_type == 'local_name')
{
g_object_name += "${filename}"
}
else if (g_object_name_type == 'random_name')
{
suffix = get_suffix(filename)
g_object_name = g_dirname + random_string(10) + suffix
}
return ''
}
function get_uploaded_object_name(filename)
{
if (g_object_name_type == 'local_name')
{
tmp_name = g_object_name
tmp_name = tmp_name.replace("${filename}", filename);
return tmp_name
}
else if(g_object_name_type == 'random_name')
{
return g_object_name
}
}
function set_upload_param(up, filename, ret)
{
g_object_name = g_dirname;
if (filename != '') {
suffix = get_suffix(filename)
calculate_object_name(filename)
}
// 这里上传文件之间, 发送Ajax, 获取上传需要的token...这里先手动填入 postman 显示的
new_multipart_params = {
'key' : g_object_name,
'policy': 'eyJleHBpcmF0aW9uIjoiMjAyMC0xMi0xMlQxMDoxNTozMVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIiJdXX0=',
'OSSAccessKeyId': 'LTAI4G2pmbQ6w2nxZfKsazqe',
'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
'signature': '0qn2Ijelj8IvdHohDRhJqeh9/4w=',
};
up.setOption({
'url': 'https://laravel-shop-api.oss-cn-beijing.aliyuncs.com/',
'multipart_params': new_multipart_params
});
up.start();
}
var uploader = new plupload.Uploader({
runtimes : 'html5,flash,silverlight,html4',
browse_button : 'selectfiles',
//multi_selection: false,
container: document.getElementById('container'),
flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
url : 'http://oss.aliyuncs.com',
init: {
PostInit: function() {
document.getElementById('ossfile').innerHTML = '';
document.getElementById('postfiles').onclick = function() {
set_upload_param(uploader, '', false);
return false;
};
},
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>';
});
},
BeforeUpload: function(up, file) {
check_object_radio();
get_dirname();
set_upload_param(up, file.name, true);
},
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)
{
document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'upload to oss success, object name:' + get_uploaded_object_name(file.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();
</code></pre>