服务端配合web端上传视频

来源:互联网 发布:马克斯cms 资源站 编辑:程序博客网 时间:2024/06/08 03:40


一般来说   我们使用阿里云的oss储存,上传文件大多数是在服务端上传,但是有的时候需要另一种上传方式—客户端上传。
资料来源:
https://doc.oss.aliyuncs.com/#_Toc336676736
https://help.aliyun.com/document_detail/31923.html?spm=5176.doc31853.2.4.p8mKxY
java后台获取policy和签名:
https://help.aliyun.com/document_detail/31926.html?spm=5176.doc31923.2.1.RAmEZT
这个文件中  我们修改了其部分源码  以便视频上传
kindeditor-all
客户端上传分两种,一种是url上传,一种是头部信息上传。这里介绍url上传
首先,web端需要从后台请求接口并拿到以下数据:
1、accesskey
2、policy
3、签名信息
4、文件名或路径
5、本项目在oss的访问域名
其中 accesskey是真实的accesskeyid,最重要的几个元素就是accesskey,签名,policy。缺一不可。
后台需要做的,是利用oss提供的接口,将签名和policy生成;
/******   代码 *****/
首先利用ajax去请求后台接口
                    var objdata;
                    var file = this.files[0];
                    $.ajax({
                        url:‘http://’+headhttp+‘/oss/webOss’,
                        dataType:‘json’,
                        async:false,//设为同步  以避免ajax请求未完成就进行下一步操作
                        data:{“contentType”:file.type},
                        type:‘post’,
                        success:function(resp){
                            if(resp.code == 13000){
                                alert(resp.msg);
                                dialog.hideLoading();
                                return false;
                            }else{
                                flog = true;
                                objdata = resp;//将数据转移到全局参数中
                            }
                        }
                    });
接下来 就将请求的数据转为oss请求格式
                        var VideoPath = objdata.data.domain+“/”+objdata.data.folder;,//拼接视频路径
                        var glo_image_data = {
                                OSSAccessKeyId:objdata.data.accesskey,//需要根据自己的bucket填写 详情请见oss api
                                policy: objdata.data.policy.policy,//policyBase64规定了请求的表单域的合法性
                                signature: objdata.data.policy.useKeyId,  //根据Access Key Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
                                success_action_status:‘200’, // 让服务端返回200,不然,默认会返回204
                                key: objdata.data.folder, //文件名字,可设置路径
                                file:file//上传的文件
                            },
                            glo_image_upload_url = “http://huahan.oss-cn-hangzhou.aliyuncs.com/ “;//上传文件的路径
其余操作,请参考文档
然后是后台的接口:
  public ReturnMsg getOssPerssions(String type) {
    String dateTime = LocalDateTime.now().toString(“yyyyMMddHHmmss”);
    String ramdom = RandomStringUtils.randomNumeric(6);
    //生成文件名称
    String fileName = String.format(“%s_%s.%s”, dateTime, ramdom,type);
    // 检查type类型
    Map<String, Object> data = new HashMap<>();
    //根据上传路径和文件名称拼接完整的文件名,如
    //         video/123456789.MP4
     String folder = HuaHanContant.POST_DIRECTORY_VIDEO+fileName;
    Map<String, String> policy = StsServiceSample.getPost();//获取policy及签名
    data.put(“folder”, folder);//完整文件名
    data.put(“domain”, StsServiceSample.DOMAIN);//oss中的访问域名
    data.put(“policy”, policy);
    data.put(“accesskey”,StsServiceSample.webAccessKeyId);//真是的key
    ReturnMsg result = new ReturnMsg(ReturnMsg.SUCCESS_CODE,ReturnMsg.SUCCESS_MSG);
    result.setData(data);
    return result;
  }
这里是获取policy和签名
public static Map<String, String> getPost() {
    Map<String, String> map = Maps.newHashMap();
    //这里是唯一需要注意的地方:OSSclient的三个参数分别为:
    //aliyun的http://后面一截::oss-cn-hangzhou.aliyuncs.com
    //真实的key
    //真实的Secret
    OSSClient client =
        new OSSClient(ENDPOINT.substring(7, ENDPOINT.length()), webAccessKeyId,webAccessKeySecret);
//以下部分,均为生成policy和签名的格式
    String calculatePostSignature = null;
    String string = null;
    try {
      long expireTime = 30;
      long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
      Date date = new Date(expireEndTime);
      PolicyConditions policyitions = new PolicyConditions();
     policyitions.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE,0, 1048576000);
      policyitions.addConditionItem(MatchMode.StartWith,PolicyConditions.COND_KEY, “post/video”);//文件上传路径
      String postPolicy = client.generatePostPolicy(date, policyitions);
      byte[] bytes = postPolicy.getBytes(“utf-8”);
      string = BinaryUtil.toBase64String(bytes);//policy
      calculatePostSignature = client.calculatePostSignature(postPolicy);//签名
      map.put(“policy”, string);
      map.put(“useKeyId”, calculatePostSignature);
    } catch (Exception e) {
      Assert.fail(e.getMessage());
    }
    return map;
  }
原创粉丝点击