温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

OSS JavaScript客户端是怎样的

发布时间:2021-09-30 09:32:06 来源:亿速云 阅读:175 作者:柒染 栏目:大数据

OSS JavaScript客户端是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

使用 OSS 上传到文件服务器做文件存储,还是一样通过 客户端直传,服务端只需要做一个签名的加密,这样子既可以做到安全性,又降低了服务端的压力:
OSS 客户daunt直传官方文档

OSS JavaScript客户端是怎样的

大致的实现流程可以看下,签名对于我的理解是防止 篡改性,保证安全性

这上面的流程大家看下,应该就懂了,就是签名,上传,然后接收回调信息,然后告诉客户端成功了,这样子就是一个上传成功的实现。

OSS JavaScript客户端是怎样的

这里是服务端的签名,大家根据自己的语言选择下载,我这边是以java为主,
如果不懂,文件存储等一些桶的配置,跨域的可以看看官方的文档
OSS 配置文档这里描述了这么去设置OSS的一些配置

设置好了之后我们来看看官方给的代码吧,我们需要设置一些什么呢:

bucketName: myxxxxxxxxxxxxx1 accessKey: LTAxxxxxxxxxxxxx1 secretKey: 46MxxxxxxxxxxxxxOe4yU region: oss-cn-beijing.aliyuncs.com dir: xxxxxxxxxxxxx/

OSS JavaScript客户端是怎样的

bucketName就是Bucket的名称,region就是区域,dir就是目录了
我这里已经把代码都整理好了,需要的自取:
https://github.com/qurenneng/CloudObjectWeb-java,可以点个start哦
下载下来后,依赖都已经弄好了可以直接跑起来,然后访问 http://localhost:8084/index.html,这里要注意跨域一定要设置好,而且,OSS有一个问题,就是上传成功后回调,所以这里必须要放在云服务器上面才能进行测试,因为要接受OSS发送过来的回调参数,所以测试只能在服务器上面进行测试,需要的可以看 https://www.aliyun.com/activity?userCode=ooxl1zly
接下来我们看看代码吧:
CommonApiController:

    /** 阿里云 oss web直传
     * 验证签名:
     * @return
     */
    @GetMapping("/callbackSign")
    public Map<String, String> callbackSign(){
        OssStsAuth ossStsAuth= new OssStsAuth();
        Map<String, String> sign = ossStsAuth.getSign(ossProperties);
        return  sign;
    }

    /**
     * 阿里云  oss 回调进行回调:
     * @return
     */
    @RequestMapping("/callbackUrl")
    public void callbackUrl(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        OssStsAuth ossStsAuth= new OssStsAuth();
        String ossCallbackBody = ossStsAuth.GetPostBody(request.getInputStream(),
                Integer.parseInt(request.getHeader("content-length")));
        boolean b = ossStsAuth.VerifyOSSCallbackRequest(request, ossCallbackBody);
        if(b){
            ossStsAuth.response(request, response, "{\"Status\":\"OK\"}", HttpServletResponse.SC_OK);
        }else{
            ossStsAuth.response(request, response, "{\"Status\":\"verdify not ok\"}", HttpServletResponse.SC_BAD_REQUEST);
        }
    }
上面就是客户端上传的控制层,下面的接口是用户接受OSS回调的接口
OssStsAuth:


    public Map<String, String> getSign(OssProperties cosProperties){
        String accessId = cosProperties.getAccessKey(); // 请填写您的AccessKeyId。
        String accessKey = cosProperties.getSecretKey(); // 请填写您的AccessKeySecret。
        String endpoint = cosProperties.getRegion(); // 请填写您的 endpoint。
        String bucket = cosProperties.getBucketName(); // 请填写您的 bucketname 。
        String host = "http://">         // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
        String callbackUrl = "http://ip:8084/callbackUrl";
        String dir = cosProperties.getDir(); // 用户上传文件时指定的前缀。
        Map<String, String> respMap = new LinkedHashMap<String, String>();
        OSSClient client = new OSSClient(endpoint, accessId, accessKey);
        try {
            long expireTime = 1000; //官方默认是 30秒 这里会出现 缓存的问题 解决 验证签名时会出现问题
            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
            Date expiration = new Date(expireEndTime);
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

            String postPolicy = client.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("utf-8");
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = client.calculatePostSignature(postPolicy);

            respMap.put("accessid", accessId);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature);
            respMap.put("dir", dir);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));

            JSONObject jasonCallback = new JSONObject();
            jasonCallback.put("callbackUrl", callbackUrl);
            jasonCallback.put("callbackBody",
                    "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
            jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
            String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
            respMap.put("callback", base64CallbackBody);
            return  respMap;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return  respMap;
    }
需要配置的参数都设置在application.yml文件中,
ossProperties:这个配置中,大家运行起来后直接访问上传就好了,配置等设置一定要弄好,有问题就下方评论吧

关于OSS JavaScript客户端是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI