Skip to content

Commit

Permalink
管理端支持显示文件大小
Browse files Browse the repository at this point in the history
  • Loading branch information
MarSeventh committed Dec 10, 2024
1 parent 217e7ae commit d159f35
Showing 1 changed file with 56 additions and 41 deletions.
97 changes: 56 additions & 41 deletions functions/upload.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,21 @@ export async function onRequestPost(context) { // Contents of context object
return new Response('Error: Please configure KV database', { status: 500 });
}

const time = new Date().getTime();
const formdata = await clonedRequest.formData();
const fileType = formdata.get('file').type;
const fileName = formdata.get('file').name;
const fileSize = (formdata.get('file').size / 1024 / 1024).toFixed(2); // 文件大小,单位MB
const metadata = {
FileName: fileName,
FileType: fileType,
FileSize: fileSize,
UploadIP: uploadIp,
ListType: "None",
TimeStamp: time,
}


// 检查fileType和fileName是否存在
if (fileType === null || fileType === undefined || fileName === null || fileName === undefined) {
return new Response('Error: fileType or fileName is wrong, check the integrity of this file!', { status: 400 });
Expand All @@ -115,6 +127,17 @@ export async function onRequestPost(context) { // Contents of context object
}
}

// 构建文件ID
const unique_index = time + Math.floor(Math.random() * 10000);
let fullId = '';
if (nameType === 'index') {
fullId = unique_index + '.' + fileExt;
} else if (nameType === 'origin') {
fullId = fileName? fileName : unique_index + '.' + fileExt;
} else {
fullId = fileName? unique_index + '_' + fileName : unique_index + '.' + fileExt;
}

// CloudFlare R2 渠道
if (uploadChannel === 'CloudflareR2') {
// 检查R2数据库是否配置
Expand All @@ -124,27 +147,13 @@ export async function onRequestPost(context) { // Contents of context object

const R2DataBase = env.img_r2;

// 构建文件ID
const time = new Date().getTime();
const unique_index = time + Math.floor(Math.random() * 10000);
let fullId = '';
if (nameType === 'index') {
fullId = unique_index + '.' + fileExt;
} else if (nameType === 'origin') {
fullId = fileName? fileName : unique_index + '.' + fileExt;
} else {
fullId = fileName? unique_index + '_' + fileName : unique_index + '.' + fileExt;
}

// 写入R2数据库
await R2DataBase.put(fullId, formdata.get('file'));

// 图像审查
const apikey = env.ModerateContentApiKey;
if (apikey == undefined || apikey == null || apikey == "") {
await env.img_url.put(fullId, "", {
metadata: { FileName: fileName, FileType: fileType, ListType: "None", Label: "None", TimeStamp: time, Channel: "CloudflareR2", UploadIP: uploadIp },
});
metadata.Label = "None";
} else {
try {
// 检查R2公网链接是否配置
Expand All @@ -157,20 +166,26 @@ export async function onRequestPost(context) { // Contents of context object
throw new Error(`HTTP error! status: ${fetchResponse.status}`);
}
const moderate_data = await fetchResponse.json();
await env.img_url.put(fullId, "", {
metadata: { FileName: fileName, FileType: fileType, ListType: "None", Label: moderate_data.rating_label, TimeStamp: time, Channel: "CloudflareR2", UploadIP: uploadIp },
});
metadata.Label = moderate_data.rating_label;
} catch (error) {
console.error('Moderate Error:', error);
// 将不带审查的图片写入数据库
await env.img_url.put(fullId, "", {
metadata: { FileName: fileName, FileType: fileType, ListType: "None", Label: "None", TimeStamp: time, Channel: "CloudflareR2", UploadIP: uploadIp },
});
metadata.Label = "None";
} finally {
console.log('Moderate Done');
}
}

// 更新metadata,写入KV数据库
try {
metadata.Channel = "CloudflareR2";
await env.img_url.put(fullId, "", {
metadata: metadata,
});
} catch (error) {
return new Response('Error: Failed to write to KV database', { status: 500 });
}


// 成功上传,将文件ID返回给客户端
return new Response(
Expand Down Expand Up @@ -245,20 +260,10 @@ export async function onRequestPost(context) { // Contents of context object
const clonedRes = await response.clone().json(); // 等待响应克隆和解析完成
const fileInfo = getFile(clonedRes);
const filePath = await getFilePath(env, fileInfo.file_id);

const time = new Date().getTime();
const id = fileInfo.file_id;
//const fullId = id + '.' + fileExt;
// 构建独一无二的 ID
const unique_index = time + Math.floor(Math.random() * 10000);
let fullId = '';
if (nameType === 'index') {
fullId = unique_index + '.' + fileExt;
} else if (nameType === 'origin') {
fullId = fileName? fileName : unique_index + '.' + fileExt;
} else {
fullId = fileName? unique_index + '_' + fileName : unique_index + '.' + fileExt;
}
// 更新FileSize
metadata.FileSize = (fileInfo.file_size / 1024 / 1024).toFixed(2);

// 若上传成功,将响应返回给客户端
if (response.ok) {
res = new Response(
Expand All @@ -272,19 +277,15 @@ export async function onRequestPost(context) { // Contents of context object
const apikey = env.ModerateContentApiKey;

if (apikey == undefined || apikey == null || apikey == "") {
await env.img_url.put(fullId, "", {
metadata: { FileName: fileName, FileType: fileType, ListType: "None", Label: "None", TimeStamp: time, Channel: "TelegramNew", TgFileId: id, UploadIP: uploadIp, TgChatId: env.TG_CHAT_ID, TgBotToken: env.TG_BOT_TOKEN },
});
metadata.Label = "None";
} else {
try {
const fetchResponse = await fetch(`https://api.moderatecontent.com/moderate/?key=${apikey}&url=https://api.telegram.org/file/bot${env.TG_BOT_TOKEN}/${filePath}`);
if (!fetchResponse.ok) {
throw new Error(`HTTP error! status: ${fetchResponse.status}`);
}
const moderate_data = await fetchResponse.json();
await env.img_url.put(fullId, "", {
metadata: { FileName: fileName, FileType: fileType, ListType: "None", Label: moderate_data.rating_label, TimeStamp: time, Channel: "TelegramNew", TgFileId: id, UploadIP: uploadIp, TgChatId: env.TG_CHAT_ID, TgBotToken: env.TG_BOT_TOKEN },
});
metadata.Label = moderate_data.rating_label;
} catch (error) {
console.error('Moderate Error:', error);
// 将不带审查的图片写入数据库
Expand All @@ -295,6 +296,19 @@ export async function onRequestPost(context) { // Contents of context object
console.log('Moderate Done');
}
}

// 更新metadata,写入KV数据库
try {
metadata.Channel = "TelegramNew";
metadata.TgFileId = id;
metadata.TgChatId = env.TG_CHAT_ID;
metadata.TgBotToken = env.TG_BOT_TOKEN;
await env.img_url.put(fullId, "", {
metadata: metadata,
});
} catch (error) {
res = new Response('Error: Failed to write to KV database', { status: 500 });
}
} catch (error) {
console.error('Error:', error);
} finally {
Expand All @@ -311,7 +325,8 @@ function getFile(response) {

const getFileDetails = (file) => ({
file_id: file.file_id,
file_name: file.file_name || file.file_unique_id
file_name: file.file_name || file.file_unique_id,
file_size: file.file_size,
});

if (response.result.photo) {
Expand Down

0 comments on commit d159f35

Please sign in to comment.