Stackedit/src/services/imageSvc.js
2022-11-13 15:16:46 +08:00

95 lines
3.5 KiB
JavaScript

import md5 from 'js-md5';
import store from '../store';
import utils from './utils';
import localDbSvc from './localDbSvc';
import smmsHelper from '../services/providers/helpers/smmsHelper';
import giteaHelper from '../services/providers/helpers/giteaHelper';
import githubHelper from '../services/providers/helpers/githubHelper';
import customHelper from '../services/providers/helpers/customHelper';
const getImagePath = (confPath, imgType) => {
const time = new Date();
const date = time.getDate();
const month = time.getMonth() + 1;
const year = time.getFullYear();
const path = confPath.replace('{YYYY}', year).replace('{MM}', `0${month}`.slice(-2))
.replace('{DD}', `0${date}`.slice(-2)).replace('{MDNAME}', store.getters['file/current'].name);
return `${path}${path.endsWith('/') ? '' : '/'}${utils.uid()}.${imgType.split('/')[1]}`;
};
export default {
// 上传图片 返回图片链接
// { url: 'http://xxxx', error: 'xxxxxx'}
async updateImg(imgFile) {
// 操作图片上传
const currStorage = store.getters['img/getCheckedStorage'];
if (!currStorage) {
return { error: '暂无已选择的图床!' };
}
// 判断是否文档空间路径
if (currStorage.type === 'workspace') {
// 如果不是git仓库 则提示不支持
if (!store.getters['workspace/currentWorkspaceIsGit']) {
return { error: '暂无已选择的图床!' };
}
const path = getImagePath(currStorage.sub, imgFile.type);
// 保存到indexeddb
const base64 = await utils.encodeFiletoBase64(imgFile);
const currDirNode = store.getters['explorer/selectedNodeFolder'];
const absolutePath = utils.getAbsoluteFilePath(currDirNode, path);
await localDbSvc.saveImg({
id: md5(absolutePath),
path: absolutePath,
content: base64,
});
return { url: path.replaceAll(' ', '%20') };
}
if (!currStorage.provider) {
return { error: '暂无已选择的图床!' };
}
const token = store.getters[`data/${currStorage.provider}TokensBySub`][currStorage.sub];
if (!token) {
return { error: '暂无已选择的图床!' };
}
let url = '';
// token图床类型
if (currStorage.type === 'token') {
const helper = currStorage.provider === 'smms' ? smmsHelper : customHelper;
url = await helper.uploadFile({
token,
file: imgFile,
});
} else if (currStorage.type === 'tokenRepo') { // git repo图床类型
const checkStorages = token.imgStorages.filter(it => it.sid === currStorage.sid);
if (!checkStorages || checkStorages.length === 0) {
return { error: '暂无已选择的图床!' };
}
const checkStorage = checkStorages[0];
const path = getImagePath(checkStorage.path, imgFile.type);
if (currStorage.provider === 'gitea') {
const result = await giteaHelper.uploadFile({
token,
projectId: checkStorage.repoUri,
branch: checkStorage.branch,
path,
content: imgFile,
isImg: true,
});
url = result.content.download_url;
} else if (currStorage.provider === 'github') {
const result = await githubHelper.uploadFile({
token,
owner: checkStorage.owner,
repo: checkStorage.repo,
branch: checkStorage.branch,
path,
content: imgFile,
isImg: true,
});
url = result.content.download_url;
}
}
return { url };
},
};