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',
|
2020-09-16 20:59:19 +08:00
|
|
|
branch: 'master',
|
2020-09-13 21:24:27 +08:00
|
|
|
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-16 20:59:19 +08:00
|
|
|
return aliOSSFileUpload(content, file.name);
|
2020-09-15 21:49:30 +08:00
|
|
|
case 'txCOS':
|
2020-09-16 20:59:19 +08:00
|
|
|
return txCOSFileUpload(file);
|
2020-09-12 16:53:52 +08:00
|
|
|
case 'github':
|
|
|
|
default:
|
2020-09-16 20:59:19 +08:00
|
|
|
return ghFileUpload(content, file.name);
|
2020-09-12 16:53:52 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-16 20:59:19 +08:00
|
|
|
function getGitHubCommonConfig(username, repo, branch, token) {
|
2020-09-13 21:24:27 +08:00
|
|
|
const date = new Date();
|
|
|
|
const dir = date.getFullYear() + '/' + (date.getMonth() + 1).toString().padStart(2, '0') + '/' + date.getDate().toString().padStart(2, '0');
|
|
|
|
return {
|
2020-09-16 20:59:19 +08:00
|
|
|
method: 'put',
|
2020-09-13 21:24:27 +08:00
|
|
|
headers: {
|
|
|
|
'Authorization': 'token ' + token
|
|
|
|
},
|
2020-09-16 20:59:19 +08:00
|
|
|
branch: branch,
|
|
|
|
url: `https://api.github.com/repos/${username}/${repo}/contents/${dir}/`
|
2020-09-13 21:24:27 +08:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-09-16 20:59:19 +08:00
|
|
|
function getDefaultConfig() {
|
|
|
|
const token = defaultConfig.accessToken[Math.floor(Math.random() * defaultConfig.accessToken.length)].replace('doocsmd', '');
|
|
|
|
return getGitHubCommonConfig(defaultConfig.username, defaultConfig.repo, defaultConfig.branch, token);
|
|
|
|
}
|
|
|
|
|
2020-09-13 21:24:27 +08:00
|
|
|
function getGitHubConfig() {
|
|
|
|
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];
|
2020-09-16 20:59:19 +08:00
|
|
|
return getGitHubCommonConfig(username, repo, githubConfig.branch, githubConfig.accessToken);
|
2020-09-13 21:24:27 +08:00
|
|
|
}
|
|
|
|
|
2020-09-16 20:59:19 +08:00
|
|
|
async function ghFileUpload(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-16 20:59:19 +08:00
|
|
|
const res = await 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-16 20:59:19 +08:00
|
|
|
branch: config.branch || 'master',
|
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-12 16:53:52 +08:00
|
|
|
});
|
2020-09-16 20:59:19 +08:00
|
|
|
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-13 21:24:27 +08:00
|
|
|
|
2020-05-01 21:30:25 +08:00
|
|
|
}
|
|
|
|
|
2020-09-16 20:59:19 +08:00
|
|
|
async function aliOSSFileUpload(content, filename) {
|
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
|
|
|
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
|
|
|
|
});
|
2020-09-16 20:59:19 +08:00
|
|
|
const res = await client.put(dir, buffer);
|
|
|
|
return res.url;
|
2020-09-12 16:53:52 +08:00
|
|
|
} catch (e) {
|
|
|
|
return Promise.reject(e);
|
|
|
|
}
|
|
|
|
}
|
2020-05-01 21:30:25 +08:00
|
|
|
|
2020-09-16 20:59:19 +08:00
|
|
|
async function txCOSFileUpload(file) {
|
2020-09-15 21:49:30 +08:00
|
|
|
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
|
|
|
};
|