md/src/api/file.js

136 lines
4.7 KiB
JavaScript
Raw Normal View History

2020-05-01 21:30:25 +08:00
import fetch from './fetch';
2020-09-13 21:24:27 +08:00
import OSS from 'ali-oss';
2020-09-15 21:49:30 +08:00
import COS from 'cos-js-sdk-v5';
2020-09-13 21:24:27 +08:00
import Buffer from 'buffer-from';
2020-08-31 20:48:22 +08:00
import {
v4 as uuidv4
} from 'uuid';
2020-09-13 21:24:27 +08:00
const defaultConfig = {
username: 'filess',
repo: 'images',
method: 'put',
accessToken: [
'7715d7ca67b5d3837cfdoocsmde8c38421815aa423510af',
'c411415bf95dbe39625doocsmd5047ba9b7a2a6c9642abe',
'2821cd8819fa345c053doocsmdca86ac653f8bc20db1f1b',
'445f0dae46ef1f2a4d6doocsmdc797301e94797b4750a4c',
'cc1d0c1426d0fd0902bdoocsmdd2d7184b14da61b86ec46',
'b67e9d15cb6f910492fdoocsmdac6b44d379c953bb19eff',
'618c4dc2244ccbbc088doocsmd125d17fd31b7d06a50cf3',
'a4b581732e1c1507458doocsmdc5b223b27dae5e2e16a55'
]
}
2020-09-12 16:53:52 +08:00
2020-09-15 21:49:30 +08:00
function fileUpload(content, file) {
2020-09-13 21:24:27 +08:00
const imgHost = localStorage.getItem('imgHost');
!imgHost && localStorage.setItem('imgHost', 'default');
switch (imgHost) {
2020-09-12 16:53:52 +08:00
case 'aliOSS':
2020-09-15 21:49:30 +08:00
return aliOSSUploadFile(content, file.name);
case 'txCOS':
return txCOSUploadFile(file);
2020-09-12 16:53:52 +08:00
case 'github':
default:
2020-09-15 21:49:30 +08:00
return githubUploadFile(content, file.name);
2020-09-12 16:53:52 +08:00
}
}
2020-09-13 21:24:27 +08:00
function getDefaultConfig() {
const date = new Date();
const dir = date.getFullYear() + '/' + (date.getMonth() + 1).toString().padStart(2, '0') + '/' + date.getDate().toString().padStart(2, '0');
const token = defaultConfig.accessToken[Math.floor(Math.random() * defaultConfig.accessToken.length)].replace('doocsmd', '');
return {
method: defaultConfig.method,
headers: {
'Authorization': 'token ' + token
},
url: `https://api.github.com/repos/${defaultConfig.username}/${defaultConfig.repo}/contents/${dir}/`
};
}
function getGitHubConfig() {
const date = new Date();
const dir = date.getFullYear() + '/' + (date.getMonth() + 1).toString().padStart(2, '0') + '/' + date.getDate().toString().padStart(2, '0');
const githubConfig = JSON.parse(localStorage.getItem("githubConfig"));
const repoUrl = githubConfig.repo.replace("https://github.com/", "").replace("http://github.com/", "").replace("github.com/", "").split("/");
const username = repoUrl[0];
const repo = repoUrl[1];
return {
method: 'put',
headers: {
'Authorization': 'token ' + githubConfig.accessToken
},
url: `https://api.github.com/repos/${username}/${repo}/contents/${dir}/`
};
}
2020-09-12 16:53:52 +08:00
function githubUploadFile(content, filename) {
2020-09-13 21:24:27 +08:00
const isDefault = localStorage.getItem('imgHost') !== 'github';
const config = isDefault ? getDefaultConfig() : getGitHubConfig();
2020-09-12 16:53:52 +08:00
const dateFilename = new Date().getTime() + '-' + uuidv4() + '.' + filename.split('.')[1];
2020-09-13 21:24:27 +08:00
2020-05-01 21:30:25 +08:00
return fetch({
2020-09-13 21:24:27 +08:00
url: config.url + dateFilename,
method: config.method,
headers: config.headers,
2020-08-29 11:55:16 +08:00
data: {
2020-09-13 21:24:27 +08:00
message: 'Upload by https://doocs.github.io/md',
2020-08-29 11:55:16 +08:00
content: content
}
2020-09-13 21:24:27 +08:00
}).then(res => {
const githubResourceUrl = 'raw.githubusercontent.com/filess/images/master/';
const cdnResourceUrl = 'cdn.jsdelivr.net/gh/filess/images/';
return isDefault ? res.content.download_url.replace(githubResourceUrl, cdnResourceUrl) : res.content.download_url;
2020-09-12 16:53:52 +08:00
});
2020-09-13 21:24:27 +08:00
2020-05-01 21:30:25 +08:00
}
2020-09-12 16:53:52 +08:00
function aliOSSUploadFile(content, filename) {
const dateFilename = new Date().getTime() + '-' + uuidv4() + '.' + filename.split('.')[1];
2020-09-13 21:24:27 +08:00
const aliOSSConfig = JSON.parse(localStorage.getItem('aliOSSConfig'));
2020-09-12 16:53:52 +08:00
const buffer = Buffer(content, 'base64');
try {
2020-09-13 21:24:27 +08:00
const dir = aliOSSConfig.path + '/' + dateFilename;
const client = new OSS({
region: aliOSSConfig.region,
bucket: aliOSSConfig.bucket,
accessKeyId: aliOSSConfig.accessKeyId,
accessKeySecret: aliOSSConfig.accessKeySecret
});
return client.put(dir, buffer).then(res => {
2020-09-12 16:53:52 +08:00
return res.url;
})
} catch (e) {
return Promise.reject(e);
}
}
2020-05-01 21:30:25 +08:00
2020-09-15 21:49:30 +08:00
function txCOSUploadFile(file) {
const dateFilename = new Date().getTime() + '-' + uuidv4() + '.' + file.name.split('.')[1];
const txCOSConfig = JSON.parse(localStorage.getItem('txCOSConfig'));
const cos = new COS({
SecretId: txCOSConfig.secretId,
SecretKey: txCOSConfig.secretKey
});
return new Promise((resolve, reject) => {
cos.putObject({
Bucket: txCOSConfig.bucket,
Region: txCOSConfig.region,
Key: txCOSConfig.path + '/' + dateFilename,
Body: file
}, function(err, data) {
if (err) {
reject(err);
} else {
resolve("https://" + data.Location);
}
});
})
}
2020-05-01 21:30:25 +08:00
export default {
fileUpload
2020-08-31 20:48:22 +08:00
};