Vue使用axios服務端簽名,前端直傳阿里Oss

前端html

<input type="file" ref="fileId" @change="getFile">

前端上傳函數

getFile: function () {
      this.$axios.get('自己的服務端簽名url', {
        params: {},
        headers: {}
      }).then((res) => {
        console.log(res.data.result)
        const params = res.data.result
        const request = new FormData()
        const file = this.$refs.fileId.files[0]
        request.append('key', params.dir + params.fileName + '.xls')
        request.append('policy', params.policy)
        request.append('OSSAccessKeyId', params.accessId)
        request.append('success_action_status', '200')
        request.append('Signature', params.signature)
        request.append('name', params.fileName + '.txt')
        request.append('file', file.file)
        this.$axios({
          url: params.host,
          method: 'post',
          data: request,
          headers: { 'Content-Type': 'multipart/form-data' }
        }).then((res) => {

        })
      })
    }

後端簽名代碼

    private Map<String, String> getSignature(String host,String dirPrefix) {

        Long userId = UserContext.getUser().getId();
        String prefix =  dirPrefix + userId + "/";
        String fileName = UUID.randomUUID().toString();

        try {
            long expireTime = 30;
            long expireEndTime = System.currentTimeMillis() + expireTime * 10000;
            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, prefix);

            String postPolicy = client.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("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", prefix);
            respMap.put("fileName", fileName);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));

            return respMap;
        } catch (Exception e) {
            // Assert.fail(e.getMessage());
            System.out.println(e.getMessage());
        }
        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章