mirror of
https://github.com/ZSCGR/CloudFlare-ImgBed.git
synced 2026-08-13 04:03:42 +08:00
Feat:新增discord/huggingface渠道支持;优化telegram大文件上传体验
This commit is contained in:
+1
-5
@@ -1,8 +1,4 @@
|
||||
.wrangler/*
|
||||
data/*
|
||||
node_modules
|
||||
.DS_Store
|
||||
docs/Sanyue-ImgHub
|
||||
docs/Sanyue-ImgHub源码
|
||||
docs/CloudFlare-ImgBed源码
|
||||
docs/discord-image
|
||||
.DS_Store
|
||||
@@ -1,6 +1,6 @@
|
||||
<div align="center">
|
||||
<a href="https://github.com/MarSeventh/CloudFlare-ImgBed"><img width="80%" alt="logo" src="static/readme/banner.png"/></a>
|
||||
<p><em>🗂️开源文件托管解决方案,支持 Docker 和无服务器部署,支持 Telegram Bot 、 Cloudflare R2 、S3 等多种存储渠道,支持 WebDAV 协议和多种 RESTful API</em></p>
|
||||
<p><em>🗂️开源文件托管解决方案,支持 Docker 和无服务器部署,支持 Telegram、Discord、Cloudflare R2、S3、Huggingface 等多种存储渠道,支持 WebDAV 协议和多种 RESTful API</em></p>
|
||||
<p>
|
||||
<a href="https://github.com/MarSeventh/CloudFlare-ImgBed/blob/main/README.md">简体中文</a> | <a href="https://github.com/MarSeventh/CloudFlare-ImgBed/blob/main/README_en.md">English</a> | <a href="https://cfbed.sanyue.de">官方网站</a>
|
||||
</p>
|
||||
@@ -39,6 +39,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
> [!IMPORTANT]
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
<div align="center">
|
||||
<a href="https://github.com/MarSeventh/CloudFlare-ImgBed"><img width="80%" alt="logo" src="static/readme/banner.png"/></a>
|
||||
<p><em>🗂️Open-source file hosting solution, supporting Docker and serverless deployment, supporting multiple storage channels such as Telegram Bot, Cloudflare R2, S3, etc., supporting WebDAV protocol and various RESTful APIs.</em></p>
|
||||
<p><em>🗂️Open-source file hosting solution, supporting Docker and serverless deployment, supporting multiple storage channels such as Telegram, Discord, Cloudflare R2, S3, Huggingface, etc., supporting WebDAV protocol and various RESTful APIs.</em></p>
|
||||
<p>
|
||||
<a href="https://github.com/MarSeventh/CloudFlare-ImgBed/blob/main/README.md">简体中文</a> | <a href="https://github.com/MarSeventh/CloudFlare-ImgBed/blob/main/README_en.md">English</a> | <a
|
||||
href="https://cfbed.sanyue.de/en">Official Website</a>
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
> [!IMPORTANT]
|
||||
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -8,26 +8,25 @@ import { HuggingFaceAPI } from '../../utils/huggingfaceAPI.js';
|
||||
import { fetchUploadConfig } from '../../utils/sysConfig.js';
|
||||
import { getDatabase } from '../../utils/databaseAdapter.js';
|
||||
import { moderateContent, endUpload } from '../../upload/uploadTools.js';
|
||||
import { userAuthCheck, UnauthorizedResponse } from '../../utils/userAuth.js';
|
||||
|
||||
export async function onRequestPost(context) {
|
||||
const { request, env, waitUntil } = context;
|
||||
const url = new URL(request.url);
|
||||
|
||||
try {
|
||||
// 验证认证码
|
||||
const authCode = request.headers.get('authcode');
|
||||
if (env.AUTH_CODE && authCode !== env.AUTH_CODE) {
|
||||
return new Response(JSON.stringify({ error: 'Unauthorized' }), {
|
||||
status: 401,
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
// 鉴权
|
||||
const requiredPermission = 'upload';
|
||||
if (!await userAuthCheck(env, url, request, requiredPermission)) {
|
||||
return UnauthorizedResponse('Unauthorized');
|
||||
}
|
||||
|
||||
const body = await request.json();
|
||||
const { fullId, filePath, sha256, fileSize, fileName, channelName, multipartParts } = body;
|
||||
|
||||
if (!fullId || !filePath || !sha256 || !fileSize) {
|
||||
return new Response(JSON.stringify({
|
||||
error: 'Missing required fields: fullId, filePath, sha256, fileSize'
|
||||
return new Response(JSON.stringify({
|
||||
error: 'Missing required fields: fullId, filePath, sha256, fileSize'
|
||||
}), {
|
||||
status: 400,
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
@@ -74,9 +73,9 @@ export async function onRequestPost(context) {
|
||||
// 提交 LFS 文件引用
|
||||
console.log('Committing LFS file...');
|
||||
const commitResult = await huggingfaceAPI.commitLfsFile(
|
||||
filePath,
|
||||
sha256,
|
||||
fileSize,
|
||||
filePath,
|
||||
sha256,
|
||||
fileSize,
|
||||
`Upload ${fileName || fullId}`
|
||||
);
|
||||
console.log('Commit result:', JSON.stringify(commitResult));
|
||||
|
||||
@@ -12,26 +12,25 @@
|
||||
|
||||
import { HuggingFaceAPI } from '../../utils/huggingfaceAPI.js';
|
||||
import { fetchUploadConfig } from '../../utils/sysConfig.js';
|
||||
import { userAuthCheck, UnauthorizedResponse } from '../../utils/userAuth.js';
|
||||
|
||||
export async function onRequestPost(context) {
|
||||
const { request, env } = context;
|
||||
const url = new URL(request.url);
|
||||
|
||||
try {
|
||||
// 验证认证码
|
||||
const authCode = request.headers.get('authcode');
|
||||
if (env.AUTH_CODE && authCode !== env.AUTH_CODE) {
|
||||
return new Response(JSON.stringify({ error: 'Unauthorized' }), {
|
||||
status: 401,
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
// 鉴权
|
||||
const requiredPermission = 'upload';
|
||||
if (!await userAuthCheck(env, url, request, requiredPermission)) {
|
||||
return UnauthorizedResponse('Unauthorized');
|
||||
}
|
||||
|
||||
const body = await request.json();
|
||||
const { fileSize, fileName, sha256, fileSample, channelName } = body;
|
||||
|
||||
if (!fileSize || !fileName || !sha256 || !fileSample) {
|
||||
return new Response(JSON.stringify({
|
||||
error: 'Missing required fields: fileSize, fileName, sha256, fileSample'
|
||||
return new Response(JSON.stringify({
|
||||
error: 'Missing required fields: fileSize, fileName, sha256, fileSample'
|
||||
}), {
|
||||
status: 400,
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
@@ -70,7 +69,7 @@ export async function onRequestPost(context) {
|
||||
// 构建文件路径
|
||||
const now = new Date();
|
||||
const yearMonth = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, '0')}`;
|
||||
|
||||
|
||||
// 生成唯一文件名
|
||||
const ext = fileName.includes('.') ? fileName.substring(fileName.lastIndexOf('.')) : '';
|
||||
const uniqueId = crypto.randomUUID().replace(/-/g, '');
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/logo.png"><link rel="apple-touch-icon" href="/logo.png"><link rel="mask-icon" href="/logo.png" color="#f4b400"><meta name="description" content="Sanyue ImgHub - A modern file hosting platform"><meta name="keywords" content="Sanyue, ImgHub, file hosting, image hosting, cloud storage"><meta name="author" content="SanyueQi"><title>Sanyue ImgHub</title><script defer="defer" src="/js/chunk-vendors.780b6559.js"></script><script defer="defer" src="/js/app.e18ad382.js"></script><link href="/css/chunk-vendors.4363ed49.css" rel="stylesheet"><link href="/css/app.14879ca1.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but sanyue_imghub doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/logo.png"><link rel="apple-touch-icon" href="/logo.png"><link rel="mask-icon" href="/logo.png" color="#f4b400"><meta name="description" content="Sanyue ImgHub - A modern file hosting platform"><meta name="keywords" content="Sanyue, ImgHub, file hosting, image hosting, cloud storage"><meta name="author" content="SanyueQi"><title>Sanyue ImgHub</title><script defer="defer" src="/js/chunk-vendors.780b6559.js"></script><script defer="defer" src="/js/app.155a02de.js"></script><link href="/css/chunk-vendors.4363ed49.css" rel="stylesheet"><link href="/css/app.14879ca1.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but sanyue_imghub doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user