Skip to content

Commit 2f05ab2

Browse files
committed
支持通过环境变量自定义全局默认链接前缀;管理端支持自定义链接前缀;管理端部分页面展示效果优化;上传API支持返回完整链接;优化上传页面显示效果
1 parent e4e1b6a commit 2f05ab2

37 files changed

+93
-68
lines changed

README.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@
4545
<summary>更新日志</summary>
4646

4747

48+
## 2024.12.27
49+
50+
Add Features:
51+
52+
- 支持通过环境变量自定义全局默认链接前缀(见3.1.3.6自定义配置接口)
53+
- 管理端支持自定义链接前缀
54+
- 管理端部分页面展示效果优化
55+
- `/upload`API支持返回完整链接(请求时设置`returnFormat`参数,详见API文档)
56+
57+
Fix Bugs:
58+
59+
- 优化上传页面显示效果
60+
4861
## 2024.12.20
4962

5063
Add Features:
@@ -515,6 +528,7 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
515528
| siteTitle | 网站标题 | 字符串 | 只支持`字符串`类型,设置为你自定义的网站标题 |
516529
| siteIcon | 网站图标 | 字符串 | 只支持`字符串`类型,设置为你自定义的网站图标链接 |
517530
| footerLink | 页脚传送门链接 | 字符串 | 只支持`字符串`类型,设置为你自定义的传送地址(如个人博客链接) |
531+
| urlPrefix | 全局默认链接前缀 | 字符串 | 只支持`字符串`类型,设置为自定义的全局默认链接前缀,该前缀会覆盖原始默认前缀,但不会覆盖用户自定义的链接前缀 |
518532

519533
> 整体示例:
520534
>
@@ -616,7 +630,7 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
616630
| ------------ | ------------------------------------------------------------ |
617631
| **接口功能** | 上传图片或视频 |
618632
| **请求方法** | POST |
619-
| **请求参数** | **Query参数**:<br />`authCode`: string类型,即为你设置的认证码<br />`serverCompress`: boolean类型,表示是否开启服务端压缩(仅针对图片文件、Telegram上传渠道生效,默认为`true`)<br />`uploadChannel`: string类型,取值为`telegram`和`cfr2`,分别代表telegram bot渠道和Cloudflare R2渠道,默认为`telegram` 渠道<br />`autoRetry`: boolean类型,表示是否开启上传失败自动切换渠道重试,默认开启<br />`uploadNameType`: string类型,表示文件命名方式,可选值为`[default, index, origin]`,分别代表默认`前缀_原名`命名、`仅前缀`命名和`仅原名`命名法,默认为`default`<br />**Body参数(application/form-data)**:<br />`file`: file类型,你要上传的文件 |
633+
| **请求参数** | **Query参数**:<br />`authCode`: string类型,即为你设置的认证码<br />`serverCompress`: boolean类型,表示是否开启服务端压缩(仅针对图片文件、Telegram上传渠道生效,默认为`true`)<br />`uploadChannel`: string类型,取值为`telegram`和`cfr2`,分别代表telegram bot渠道和Cloudflare R2渠道,默认为`telegram` 渠道<br />`autoRetry`: boolean类型,表示是否开启上传失败自动切换渠道重试,默认开启<br />`uploadNameType`: string类型,表示文件命名方式,可选值为`[default, index, origin]`,分别代表默认`前缀_原名`命名、`仅前缀`命名和`仅原名`命名法,默认为`default`<br />`returnFormat`:string类型,表示返回链接格式,可选值为`[default, full]`,分别代表默认的`/file/id`格式、完整链接格式<br />**Body参数(application/form-data)**:<br />`file`: file类型,你要上传的文件 |
620634
| **返回响应** | `data[0].src`为获得的图片链接(注意不包含域名,需要自己添加) |
621635
622636
> **请求示例**:
@@ -685,6 +699,7 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
685699
- ~~背景切换时间自定义~~(2024.9.11已完成)
686700
- ~~背景透明度支持自定义~~(2024.9.12已完成)
687701
- ~~页脚自定义传送门~~(2024.10.20已完成)
702+
- ~~全局自定义链接前缀~~(2024.12.27已完成)
688703
5. :white_check_mark:~~增加随机图API~~(2024.7.25已完成)
689704
6. :white_check_mark:~~完善多格式链接展示形式,增加ubb格式链接支持~~(2024.8.21已完成)
690705
7. :white_check_mark:~~完善登录逻辑,后端增加认证码校验接口~~(2024.8.21已完成)
@@ -707,7 +722,7 @@ Web端在登录页面输入你的**认证码**即可登录使用;API端需要
707722
24. :white_check_mark:~~支持自定义链接前缀~~(2024.12.4已完成)
708723
25. :memo:对接alist,或实现webdav(评估中)
709724
26. :white_check_mark:~~文件详情增加文件大小记录~~(2024.12.10已完成)
710-
27. :hourglass_flowing_sand:支持管理员自定义全局默认链接前缀
725+
27. :white_check_mark:支持管理员自定义全局默认链接前缀
711726
28. :white_check_mark:~~开放更多文件格式~~(2024.12.9已完成)
712727
29. :white_check_mark:~~进行删除、加入白名单、加入黑名单等操作时,自动清除CF CDN缓存,避免延迟生效~~(2024.12.11已完成)
713728
30. :white_check_mark:~~管理端批量选择时,记录用户选择的顺序~~(2024.12.20已完成)

css/209.59f10abe.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/209.59f10abe.css.gz

5.52 KB
Binary file not shown.

css/358.cc8f10ea.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/358.cc8f10ea.css.gz

7.78 KB
Binary file not shown.

css/631.048af2d3.css

Lines changed: 0 additions & 1 deletion
This file was deleted.

css/631.048af2d3.css.gz

-8.71 KB
Binary file not shown.

css/659.f084e9fe.css

Lines changed: 0 additions & 1 deletion
This file was deleted.

css/659.f084e9fe.css.gz

-9.75 KB
Binary file not shown.

css/860.701951d0.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/860.701951d0.css.gz

3.73 KB
Binary file not shown.

functions/upload.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,15 @@ export async function onRequestPost(context) { // Contents of context object
146146
fullId = fileName? unique_index + '_' + fileName : unique_index + '.' + fileExt;
147147
}
148148

149+
// 获得返回链接格式, default为返回/file/id, full为返回完整链接
150+
const returnFormat = url.searchParams.get('returnFormat') || 'default';
151+
let returnLink = '';
152+
if (returnFormat === 'full') {
153+
returnLink = `${url.origin}/file/${fullId}`;
154+
} else {
155+
returnLink = `/file/${fullId}`;
156+
}
157+
149158
// 清除CDN缓存
150159
const cdnUrl = `https://${url.hostname}/file/${fullId}`;
151160
await purgeCDNCache(env, cdnUrl, url);
@@ -159,15 +168,15 @@ export async function onRequestPost(context) { // Contents of context object
159168
// 上传到不同渠道
160169
if (uploadChannel === 'CloudflareR2') {
161170
// -------------CloudFlare R2 渠道---------------
162-
const res = await uploadFileToCloudflareR2(env, formdata, fullId, metadata);
171+
const res = await uploadFileToCloudflareR2(env, formdata, fullId, metadata, returnLink);
163172
if (res.status === 200 || !autoRetry) {
164173
return res;
165174
} else {
166175
err = await res.text();
167176
}
168177
} else {
169178
// ----------------Telegram New 渠道-------------------
170-
const res = await uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest);
179+
const res = await uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest, returnLink);
171180
if (res.status === 200 || !autoRetry) {
172181
return res;
173182
} else {
@@ -176,13 +185,13 @@ export async function onRequestPost(context) { // Contents of context object
176185
}
177186

178187
// 上传失败,开始自动切换渠道重试
179-
const res = await tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest);
188+
const res = await tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest, returnLink);
180189
return res;
181190
}
182191

183192

184193
// 自动切换渠道重试
185-
async function tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest) {
194+
async function tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest, returnLink) {
186195
// 渠道列表
187196
const channelList = ['CloudflareR2', 'TelegramNew'];
188197
const errMessages = {};
@@ -191,9 +200,9 @@ async function tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fil
191200
if (channelList[i] !== uploadChannel) {
192201
let res = null;
193202
if (channelList[i] === 'CloudflareR2') {
194-
res = await uploadFileToCloudflareR2(env, formdata, fullId, metadata);
203+
res = await uploadFileToCloudflareR2(env, formdata, fullId, metadata, returnLink);
195204
} else if (channelList[i] === 'TelegramNew') {
196-
res = await uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest);
205+
res = await uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest, returnLink);
197206
}
198207
if (res.status === 200) {
199208
return res;
@@ -208,7 +217,7 @@ async function tryRetry(err, env, uploadChannel, formdata, fullId, metadata, fil
208217

209218

210219
// 上传到Cloudflare R2
211-
async function uploadFileToCloudflareR2(env, formdata, fullId, metadata) {
220+
async function uploadFileToCloudflareR2(env, formdata, fullId, metadata, returnLink) {
212221
// 检查R2数据库是否配置
213222
if (typeof env.img_r2 == "undefined" || env.img_r2 == null || env.img_r2 == "") {
214223
return new Response('Error: Please configure R2 database', { status: 500 });
@@ -237,7 +246,7 @@ async function uploadFileToCloudflareR2(env, formdata, fullId, metadata) {
237246

238247
// 成功上传,将文件ID返回给客户端
239248
return new Response(
240-
JSON.stringify([{ 'src': `/file/${fullId}` }]),
249+
JSON.stringify([{ 'src': `${returnLink}` }]),
241250
{
242251
status: 200,
243252
headers: { 'Content-Type': 'application/json' }
@@ -247,7 +256,7 @@ async function uploadFileToCloudflareR2(env, formdata, fullId, metadata) {
247256

248257

249258
// 上传到Telegram
250-
async function uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest) {
259+
async function uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fileName, fileType, url, clonedRequest, returnLink) {
251260
// 由于TG会把gif后缀的文件转为视频,所以需要修改后缀名绕过限制
252261
if (fileExt === 'gif') {
253262
const newFileName = fileName.replace(/\.gif$/, '.jpeg');
@@ -323,7 +332,7 @@ async function uploadFileToTelegram(env, formdata, fullId, metadata, fileExt, fi
323332
// 若上传成功,将响应返回给客户端
324333
if (response.ok) {
325334
res = new Response(
326-
JSON.stringify([{ 'src': `/file/${fullId}` }]),
335+
JSON.stringify([{ 'src': `${returnLink}` }]),
327336
{
328337
status: 200,
329338
headers: { 'Content-Type': 'application/json' }

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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"><title>Sanyue ImgHub</title><script defer="defer" src="/js/app.fa588650.js"></script><link href="/css/app.def7ef9b.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>
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"><title>Sanyue ImgHub</title><script defer="defer" src="/js/app.6ee1e6e7.js"></script><link href="/css/app.def7ef9b.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>

index.html.gz

-3 Bytes
Binary file not shown.

js/209.9070385a.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/209.9070385a.js.gz

10.7 KB
Binary file not shown.

js/209.9070385a.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/209.9070385a.js.map.gz

26 KB
Binary file not shown.

js/659.d31a1a23.js renamed to js/358.a8a8550e.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/358.a8a8550e.js.gz

34.1 KB
Binary file not shown.

js/358.a8a8550e.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/358.a8a8550e.js.map.gz

74.5 KB
Binary file not shown.

js/631.36587239.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

js/631.36587239.js.gz

-10.6 KB
Binary file not shown.

js/631.36587239.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

js/631.36587239.js.map.gz

-25.9 KB
Binary file not shown.

js/659.d31a1a23.js.gz

-33.5 KB
Binary file not shown.

js/659.d31a1a23.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

js/659.d31a1a23.js.map.gz

-73.1 KB
Binary file not shown.

js/app.6ee1e6e7.js

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/app.6ee1e6e7.js.gz

698 KB
Binary file not shown.

js/app.fa588650.js.map renamed to js/app.6ee1e6e7.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/app.6ee1e6e7.js.map.gz

1.7 MB
Binary file not shown.

js/app.fa588650.js

Lines changed: 0 additions & 46 deletions
This file was deleted.

js/app.fa588650.js.gz

-698 KB
Binary file not shown.

js/app.fa588650.js.map.gz

-1.7 MB
Binary file not shown.

static/readme/award.png

-67.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)