"feat: 同步功能增强与配置优化,支持多类型同步及日志分级"

This commit is contained in:
2025-05-12 23:53:45 +08:00
parent eaccbf5ada
commit 785bd7b004
13 changed files with 278 additions and 35 deletions

View File

@@ -24,6 +24,7 @@ type Options = {
check?: boolean;
returnContent?: boolean;
setToken?: boolean;
hash?: string;
[key: string]: any;
};
export const fetchLink = async (url: string, opts?: Options) => {
@@ -39,8 +40,10 @@ export const fetchLink = async (url: string, opts?: Options) => {
if (token && setToken) {
fetchURL.searchParams.set('token', token);
}
if (opts?.hash) {
fetchURL.searchParams.set('hash', opts.hash);
}
fetchURL.searchParams.set('download', 'true');
console.log('fetchURL', fetchURL.toString());
const res = await fetch(fetchURL.toString());
const blob = await res.blob();
@@ -52,6 +55,7 @@ export const fetchLink = async (url: string, opts?: Options) => {
const pathname = fetchURL.pathname;
const filename = pathname.split('/').pop();
return {
status: res.status,
filename,
blob,
type,

View File

@@ -1,5 +1,6 @@
import { getBufferHash, getHash } from '@/uitls/hash.ts';
import FormData from 'form-data';
import { logger } from '../logger.ts';
export const handleResponse = async (err: any, res: any) => {
return new Promise((resolve) => {
if (err) {
@@ -27,6 +28,9 @@ export const getFormParams = (opts: UploadOptions, headers: any): FormData.Submi
if (opts.token) {
// url.searchParams.append('token', opts.token);
}
if (opts.meta) {
url.searchParams.append('meta', encodeURIComponent(JSON.stringify(opts.meta)));
}
const value: FormData.SubmitOptions = {
path: url.pathname + url.search,
host: url.hostname,
@@ -38,7 +42,7 @@ export const getFormParams = (opts: UploadOptions, headers: any): FormData.Submi
...headers,
},
};
console.log('getFormParams', value);
logger.debug('getFormParams', value);
return value;
};
type UploadOptions = {
@@ -47,7 +51,21 @@ type UploadOptions = {
token?: string;
form?: FormData;
needHash?: boolean;
hash?: string;
meta?: Record<string, any>;
};
/**
* 单个文件上传
* @param opts
* @param opts.url 上传地址
* @param opts.file 文件路径或Buffer
* @param opts.token token
* @param opts.form form对象
* @param opts.needHash 是否需要hash
* @param opts.hash hash
* @param opts.meta meta
* @returns
*/
export const upload = (opts: UploadOptions): Promise<{ code?: number; message?: string; [key: string]: any }> => {
const form = opts?.form || new FormData();
if (!opts.form) {
@@ -62,7 +80,7 @@ export const upload = (opts: UploadOptions): Promise<{ code?: number; message?:
}
form.append('file', value);
if (opts.needHash) {
hash = getBufferHash(value);
hash = opts?.hash || getBufferHash(value);
opts.url = new URL(opts.url.toString());
opts.url.searchParams.append('hash', hash);
}

View File

@@ -1,5 +1,6 @@
import { Logger } from '@kevisual/logger/node';
const level = process.env.LOG_LEVEL || 'info';
export const logger = new Logger({
level: 'info',
level: level as any,
});