前端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;
}