• 文件上传到阿里云OSS存储(前端js含demo)


    文件上传

    //自定义
    <input ref = 'uploadbtn' type="file" multiple="multiple" onChange={changeFiles}/>
    

    补充:multiple="multiple"用于定义是否允许一次多文件上传;changeFiles方法在每次更改文件时候触发;在react中用ref方法this.refs.uploadbtn.files拿到这个节点选择的files;

    ⚠️注意:由于阿里云oss给出的只能一次上传一个文件,因此这里如果要同时上传多个文件的话注意应该文件遍历挨个上传(同时这里需要注意;下载同时下载多个文件时,如果前一个暂未下载完成导致后面failed,需要等待前面一个文件下载完成之后再下载另外一个)
    • 开始上传
      • 上传组件中我们获取了需要上传的文件进行上传
      • 方法:
        • 直接引入使用
        • 使用ali-sdk 进行
    //直接引入使用
    /**
    **html中引入aliyun-oss-sdk.min.js
    **/
    <script type="text/javascript" src="./aliyun-oss-sdk.min.js"></script>
    
    
    //js部分
    var progress = function (p) {
      console.log(p)	//上传进度
    };
    var options = {
        progress: progress,	//可以拿到文件上传进度;用于写进度条
        partSize: 500 * 1024,
        meta: {
          year: 2017,
          people: 'test'
        },
        timeout: 60000,
        callback: {
        	//如果有后台鉴权;那么这里是鉴权的回调;回调返回给后台的数据;下面只是样例
        	 'url': appHost + '/oss/callback',
          'body': "{"bucket":${bucket},"object":${object}, "type":${x:type}, "name":${x:name}, "iscover":${x:iscover}}",  
          'contentType': 'application/json',  
          'customValue': {    // 自定义参数
            'type': '0',
            'name': 'default图片.jpeg',
            'iscover': '0',  //0:否 1:是
          },
          },
        },
    
    };
    var uploadFile = function (file) {
    	
    //如果使用后台鉴权返回临时accessKeyId、accessKeySecret、stsToken需要前面的  OSS.urllib.request;如果没有后台鉴权、那么直接填写阿里云OSS给出的值(就安全方面;阿里云平台建议采用鉴权方式,避免前端将访问accessKeyId、accessKeySecret、stsToken直接在浏览器暴露);下面url是指鉴权服务器地址
      OSS.urllib.request(url, {
        method: 'GET'
      }).then(function (result) {
        var creds = JSON.parse(result.data);
        var client = new OSS({
          region: region,
          accessKeyId: creds.AccessKeyId,
          accessKeySecret: creds.AccessKeySecret,
          stsToken: creds.SecurityToken,
          bucket: bucket
        });
        //objectKey, file, options三个参数分别是:objectKey阿里云上buket中的虚拟文件地址(String);file是读取的文件,注意这里是一个文件;options见上定义的options
     client.multipartUpload(objectKey, file, options).then(function (res) {
        console.log('upload success: %j', res);
        }
      });
    }
    
    //使用ali-sdk进行
    /**
    ** 1、安装npm install ali-oss --save
    ** 2、引入let OSS = require('ali-oss');
    ** 3、使用 var client = new OSS({....});初始client不一样;其他同上
    **/
    

    文件下载

    let OSS = require('ali-oss');
    var appHost = '';	//阿里云host地址
    var appServerUrl = appHost+'/oss/ststoken';
    var bucket = '';	
    var region = '';	//阿里云OSS服务区地区
    
    export const downloadFile = function (fileurl) {  //fileurl是指文件在阿里云上的存储地址
        var url = appServerUrl;
      return OSS.urllib.request(url, {
        method: 'GET'
      }).then(function (result) {
        var creds = JSON.parse(result.data);
        var client = new OSS({
          region: region,
          accessKeyId: creds.AccessKeyId,
          accessKeySecret: creds.AccessKeySecret,
          stsToken: creds.SecurityToken,
          bucket: bucket
        });
    
        var result = client.signatureUrl(fileurl, {
            response: {
            'content-disposition': 'attachment; filename="' + downloadFilename + '"'	//downloadFilename是指下载下来的文件名称
            }
        });
        window.location = result;
        return result;
      });
    };
    
    未完待续…(内容上传;文件列表获取;案例demo;待定)
  • 相关阅读:
    node.js_1
    CSS实现垂直居中的方法
    Javascript实现图片的预加载的完整实现------》转载自(空城计-Code记)
    面向对象----选项卡
    for循环执行步骤
    适配器模式 在Android中的简单理解
    单例模式
    Android的ImageLoader图片加载简单逻辑
    在魅族手机上使用ObjectAnimator竟然不兼容?原来是这样……
    Android异步消息处理机制,Handler,Message,Looper的简单理解
  • 原文地址:https://www.cnblogs.com/smileyqp/p/12675223.html
Copyright © 2020-2023  润新知