zoukankan      html  css  js  c++  java
  • h5页面通过阿里云的broswer-js-sdk上传文件

    之前做过上传图片的操作都是传给服务器端,再由服务器端上传至阿里云的oss上,最近做的一个项目有频繁上传图片的操作为了减少请求时间决定用阿里云的sdk直接由前端上传。

    关于sdk阿里云的文档有详细说明:https://help.aliyun.com/document_detail/64041.html?spm=a2c4g.11186623.6.766.EzLJ4T;

    首先,这个sdk是基于node环境的,所以必须要服务器端去搭建node环境支持。其次为了不在网页中暴露AccessKeyId和AccessKeySecret,我们授权服务器申请临时权限,采用STS进行临时授权。(参考OSS使用STS设置子账号和STS的Policy,参考Node.js STS AppServer搭建自己的授权服务器。)

    下面主要介绍前端代码逻辑(主要用于上传图片):

     var appServer = 'XXX';//授权服务器URL
        var bucket = 'XXX';//OSS文件名称
        var region = 'XXX';//OSS区域
    
        var urllib = OSS.urllib;
        var Buffer = OSS.Buffer;
        var OSS = OSS.Wrapper;
        var STS = OSS.STS;
    
    
    //关联到oss,上传时执行函数
        var applyTokenDo = function (imgUrlBlob) { //imgUrlBlob为blob格式的图片路径
            var url = appServer;
            return urllib.request(url, {
                method: 'GET'
            }).then(function (result) {
                console.log(result)
                var creds = JSON.parse(result.data);
                var client = new OSS({
                    region: region,
                    accessKeyId: creds.AccessKeyId,
                    accessKeySecret: creds.AccessKeySecret,
                    stsToken: creds.SecurityToken,
                    bucket: bucket
                });
                return upload(client,imgUrlBlob,sucFunc);
            });
        };
    
    //上传图片到oss
        var upload = function(client,imgUrlBlob){
            var ind = 0;
     
                // blob转arrayBuffer
                var reader1 = new FileReader();
                reader1.readAsArrayBuffer(imgUrlBlob]);
                var suffix =imgUrlBlob.type.split('/')[1];
    
                reader1.onload = function (event) {
                    var storeAs = '文件目录/文件名称'+ '.'+suffix;
         
                    // arrayBuffer转Buffer
                    var buffer = new Buffer(event.target.result);
    
                    // 单张图片上传
              
                    client.put(storeAs, buffer).then(function(result){
                        //上传成功回调
                        /* e.g. result = {
                         name: "Uploads/file/20171125/1511601396119.png",
                         res: {status: 200, statusCode: 200, headers: {…}, size: 0, aborted: false, …},
                         url: "http://bucket.oss-cn-shenzhen.aliyuncs.com/Uploads/file/20171125/1511601396119.png"
                         } */
                    }).catch(function(err){
                        console.log(err);
                    });
    
    
        }
    多张图片上传在文档里没有找到方法,可以用循环遍历的方式重复调用上传接口来上传。

      

  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/xunhuang/p/9047674.html
Copyright © 2011-2022 走看看