bookShopApi

商城Api项目


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.lanzous.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 &lt; 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 != '' &amp;&amp; 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 &lt; 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 += '&lt;div id="' + file.id + '"&gt;' + file.name + ' (' + plupload.formatSize(file.size) + ')&lt;b&gt;&lt;/b&gt;' +'&lt;div class="progress"&gt;&lt;div class="progress-bar" style="width: 0%"&gt;&lt;/div&gt;&lt;/div&gt;' +'&lt;/div&gt;'; }); }, 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 = '&lt;span&gt;' + file.percent + "%&lt;/span&gt;"; 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>

页面列表

ITEM_HTML