135 lines
3.4 KiB
JavaScript
135 lines
3.4 KiB
JavaScript
const qiniu = require('qiniu');
|
|
const { unlinkSync } = require('fs');
|
|
const { resolve } = require('path');
|
|
|
|
const getFileKey = (file, prefix) => {
|
|
const uuid = () => {
|
|
function s4() {
|
|
return Math.floor((1 + Math.random()) * 0x10000)
|
|
.toString(16)
|
|
.substring(1);
|
|
}
|
|
return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4();
|
|
};
|
|
const splitted = file ? file.originalname.split('.') : '';
|
|
const extension = file ? splitted[splitted.length - 1] : 'png';
|
|
return {
|
|
fileName: uuid() + '.' + extension,
|
|
key: prefix
|
|
? `${prefix}/` + uuid() + '.' + extension
|
|
: 'resource/' + uuid() + '.' + extension,
|
|
};
|
|
};
|
|
|
|
const getFileName = (file, prefix) => {
|
|
const uuid = () => {
|
|
function s4() {
|
|
return Math.floor((1 + Math.random()) * 0x10000)
|
|
.toString(16)
|
|
.substring(1);
|
|
}
|
|
return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4();
|
|
};
|
|
return uuid() + '.png'
|
|
};
|
|
|
|
const deleteFile = (name) => {
|
|
const path = resolve(__dirname, `../public/${name}`);
|
|
unlinkSync(path);
|
|
};
|
|
|
|
const saveToQiNIu = (fileName) => {
|
|
const mac = new qiniu.auth.digest.Mac(
|
|
process.env.ACCESS_KEY,
|
|
process.env.SECRET_KEY,
|
|
);
|
|
const options = { scope: process.env.BUCKET };
|
|
const putPolicy = new qiniu.rs.PutPolicy(options);
|
|
const uploadToken = putPolicy.uploadToken(mac);
|
|
const config = new qiniu.conf.Config();
|
|
config.zone = qiniu.zone.Zone_z2;
|
|
const localFile = resolve(__dirname, `../public/${fileName}`);
|
|
const putExtra = new qiniu.form_up.PutExtra();
|
|
const formUploader = new qiniu.form_up.FormUploader(config);
|
|
return new Promise((resolve, reject) => {
|
|
formUploader.putFile(
|
|
uploadToken,
|
|
fileName,
|
|
localFile,
|
|
putExtra,
|
|
function (respErr, respBody, respInfo) {
|
|
if (respErr) {
|
|
reject(respErr);
|
|
}
|
|
if (respInfo.statusCode == 200) {
|
|
resolve(respBody);
|
|
}
|
|
},
|
|
);
|
|
});
|
|
};
|
|
|
|
const deleteQiNiuSource = (key) => {
|
|
const mac = new qiniu.auth.digest.Mac(
|
|
process.env.ACCESS_KEY,
|
|
process.env.SECRET_KEY,
|
|
);
|
|
const config = new qiniu.conf.Config();
|
|
config.zone = qiniu.zone.Zone_z2;
|
|
const bucketManager = new qiniu.rs.BucketManager(mac, config);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
bucketManager.delete(
|
|
process.env.BUCKET,
|
|
key,
|
|
function (err, respBody, respInfo) {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(respInfo);
|
|
}
|
|
},
|
|
);
|
|
});
|
|
};
|
|
|
|
const uploadFileByBuffer = (buffer, prefix) => {
|
|
const { key } = getFileKey('', prefix);
|
|
|
|
const mac = new qiniu.auth.digest.Mac(
|
|
process.env.ACCESS_KEY,
|
|
process.env.SECRET_KEY,
|
|
);
|
|
const options = { scope: process.env.BUCKET };
|
|
const putPolicy = new qiniu.rs.PutPolicy(options);
|
|
const uploadToken = putPolicy.uploadToken(mac);
|
|
const config = new qiniu.conf.Config();
|
|
config.zone = qiniu.zone.Zone_z2;
|
|
const putExtra = new qiniu.form_up.PutExtra();
|
|
const formUploader = new qiniu.form_up.FormUploader(config);
|
|
return new Promise((resolve, reject) => {
|
|
formUploader.put(
|
|
uploadToken,
|
|
key,
|
|
buffer,
|
|
putExtra,
|
|
function (respErr, respBody, respInfo) {
|
|
if (respErr) {
|
|
reject(respErr);
|
|
}
|
|
if (respInfo.statusCode == 200) {
|
|
resolve(key);
|
|
}
|
|
},
|
|
);
|
|
});
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
saveToQiNIu,
|
|
deleteQiNiuSource,
|
|
getFileName,
|
|
deleteFile,
|
|
uploadFileByBuffer
|
|
} |