md/src/api/file.js

130 lines
4.6 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',
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':
return aliOSSFileUpload(content, file.name);
2020-09-15 21:49:30 +08:00
case 'txCOS':
return txCOSFileUpload(file);
2020-09-12 16:53:52 +08:00
case 'github':
default:
return ghFileUpload(content, file.name);
2020-09-12 16:53:52 +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 {
method: 'put',
2020-09-13 21:24:27 +08:00
headers: {
'Authorization': 'token ' + token
},
branch: branch,
url: `https://api.github.com/repos/${username}/${repo}/contents/${dir}/`
2020-09-13 21:24:27 +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];
return getGitHubCommonConfig(username, repo, githubConfig.branch, githubConfig.accessToken);
2020-09-13 21:24:27 +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];
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: {
branch: config.branch || 'master',
message: `Upload by ${window.location.href}`,
2020-08-29 11:55:16 +08:00
content: content
}
2020-09-12 16:53:52 +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
}
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
});
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
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
};