OSS文件直传

阿里云对象存储, 服务端签名直传并设置上传回调自定义参数
上传回调服务响应OSS发送给应用服务器的POST消息,得到上文callbackBody的参数

@RequestMapping("/upload")
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String accessId = MultipartUploadSample.accessKeyId; // 请填写您的AccessKeyId。
        String accessKey = MultipartUploadSample.accessKeySecret; // 请填写您的AccessKeySecret。
        String endpoint = MultipartUploadSample.endpoint; // 请填写您的 endpoint。
        String bucket = MultipartUploadSample.bucketName; // 请填写您的 bucketname 。
        String host = "http://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
        // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
        String callbackUrl = "http://locahost:8080/callback";
        String dir = "user-dir-prefix/"; // 用户上传文件时指定的前缀。
        String type = request.getParameter("type");
        if (type != null) {
            if (type.equals("0")) {
                dir = "image";
            } else if (type.equals("1")) {
                dir = "video";
            } else if (type.equals("2")) {
                dir = "speech";
            }
        }
        OSSClient client = new OSSClient(endpoint, accessId, accessKey);
        try {
            long expireTime = 6000;
            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(StandardCharsets.UTF_8);
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = client.calculatePostSignature(postPolicy);

            Map<String, String> respMap = new LinkedHashMap<String, String>();
            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);

            JSONObject ja1 = JSONObject.fromObject(respMap);
            // System.out.println(ja1.toString());
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST"); 
            CommonUtils.returnCode(response, ReturnData.success(ja1));
        } catch (Exception e) {
            // Assert.fail(e.getMessage());
            CommonUtils.returnCode(response, ReturnData.fail());
        }
    }

你可能感兴趣的:(java)