1.api.ocrUi:调用后端接口返回oss相关信息(AccessKeyId、AccessKeySecret、SecurityToken、BucketName、Expiration)。
2.Expiration超时时间,通过后端返回的过期日期转换成时间戳与当前时间戳进行判断,在还有1分钟超时的时候重新调用接口更新相关oss信息。
let OSS = require('ali-oss');
const path = require("path")
import api from '@/api';
let ossConfig = null;
let prescription = new Date().getTime();
const OssFunc = async () => {
let now = new Date().getTime();
console.log('prescription - now',prescription - now)
if (prescription - now < 60000) {
let params = {
requestType: 'getStsToken',
}
console.log('oss调用')
let res = await api.ocrUi(params);
ossConfig = res.body;
prescription = new Date(res.body.Expiration).getTime()
}
// 设置客户端请求访问凭证的地址。
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
region: 'oss-cn-shanghai',
accessKeyId: ossConfig.AccessKeyId,
accessKeySecret: ossConfig.AccessKeySecret,
stsToken: ossConfig.SecurityToken,
// endpoint: token.Endpoint,
bucket: ossConfig.BucketName,
});
return client;
};
async function put(fileName, file) {
try {
// 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。
// 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
//const result = await oss.put(fileName);
//let result = await oss.put('object-name', new Buffer('hello world'))
let oss = await OssFunc();
const result = await oss.multipartUpload(fileName, file);
return result;
} catch (e) {
console.log(e);
}
}
async function putFile(fileName, file) {
try {
// 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。
// 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
//const result = await oss.put(fileName);
let oss = await OssFunc();
let result = await oss.put(fileName, file)
return result;
} catch (e) {
console.log(e);
}
}
async function getFileBuffer(name) {
try {
let oss = await OssFunc();
return oss.get(name);
} catch (e) {
console.log(e);
}
}
async function get() {
try {
// 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
let oss = await OssFunc();
const result = await oss.get(fileName, file);
console.log(result);
return 'https://test-jzstore.oss-cn-shanghai.aliyuncs.com/' + result.name;
} catch (e) {
console.log(e);
}
}
async function getConfig(url) {
try {
let oss = await OssFunc();
let result = await oss.get(url)
let str = result.content.toString()
return str
} catch (e) {
return false
}
}
async function getUrl(name) {
try {
// 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
let oss = await OssFunc();
const result = await oss.signatureUrl(name);
return result;
} catch (e) {
console.log(e);
}
}
export {
getFileBuffer,
put,
get,
getUrl,
putFile,
getConfig
}