Skip to content

Commit 2b6580b

Browse files
authored
Update _worker.js
修复无法正常加载的问题。
1 parent a037fa7 commit 2b6580b

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

_worker.js

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -750,33 +750,46 @@ async function handleImageRequest(request, DATABASE, TG_BOT_TOKEN) {
750750
const cachedResponse = await cache.match(cacheKey);
751751
if (cachedResponse) return cachedResponse;
752752
const result = await DATABASE.prepare('SELECT fileId FROM media WHERE url = ?').bind(requestedUrl).first();
753-
if (result) {
754-
const fileId = result.fileId;
755-
const getFileResponse = await fetch(`https://api.telegram.org/bot${TG_BOT_TOKEN}/getFile?file_id=${fileId}`);
756-
if (!getFileResponse.ok) return new Response(null, { status: 404 });
757-
const fileData = await getFileResponse.json();
758-
const filePath = fileData.result.file_path;
759-
const telegramFileUrl = `https://api.telegram.org/file/bot${TG_BOT_TOKEN}/${filePath}`;
760-
const response = await fetch(telegramFileUrl);
761-
if (response.ok) {
762-
const fileExtension = requestedUrl.split('.').pop().toLowerCase();
763-
let contentType = 'text/plain';
764-
if (fileExtension === 'jpg' || fileExtension === 'jpeg') contentType = 'image/jpeg';
765-
if (fileExtension === 'png') contentType = 'image/png';
766-
if (fileExtension === 'gif') contentType = 'image/gif';
767-
if (fileExtension === 'webp') contentType = 'image/webp';
768-
if (fileExtension === 'mp4') contentType = 'video/mp4';
769-
const headers = new Headers(response.headers);
770-
headers.set('Content-Type', contentType);
771-
headers.set('Content-Disposition', 'inline');
772-
const responseToCache = new Response(response.body, { status: response.status, headers });
773-
await cache.put(cacheKey, responseToCache.clone());
774-
return responseToCache;
753+
if (!result) {
754+
return new Response('未匹配到url', { status: 404 });
755+
}
756+
const fileId = result.fileId;
757+
let filePath;
758+
let attempts = 0;
759+
const maxAttempts = 3;
760+
while (attempts < maxAttempts) {
761+
const getFilePath = await fetch(`https://api.telegram.org/bot${TG_BOT_TOKEN}/getFile?file_id=${fileId}`);
762+
if (!getFilePath.ok) {
763+
return new Response('请求文件路径失败', { status: 500 });
764+
}
765+
const fileData = await getFilePath.json();
766+
if (fileData.ok && fileData.result.file_path) {
767+
filePath = fileData.result.file_path;
768+
break;
775769
}
770+
attempts++;
771+
}
772+
if (!filePath) {
773+
return new Response('未找到文件路径', { status: 404 });
774+
}
775+
const getFileResponse = `https://api.telegram.org/file/bot${TG_BOT_TOKEN}/${filePath}`;
776+
const response = await fetch(getFileResponse);
777+
if (!response.ok) {
778+
return new Response('获取文件内容失败', { status: 500 });
776779
}
777-
const notFoundResponse = new Response(null, { status: 404 });
778-
await cache.put(cacheKey, notFoundResponse.clone());
779-
return notFoundResponse;
780+
const fileExtension = requestedUrl.split('.').pop().toLowerCase();
781+
let contentType = 'text/plain';
782+
if (fileExtension === 'jpg' || fileExtension === 'jpeg') contentType = 'image/jpeg';
783+
if (fileExtension === 'png') contentType = 'image/png';
784+
if (fileExtension === 'gif') contentType = 'image/gif';
785+
if (fileExtension === 'webp') contentType = 'image/webp';
786+
if (fileExtension === 'mp4') contentType = 'video/mp4';
787+
const headers = new Headers(response.headers);
788+
headers.set('Content-Type', contentType);
789+
headers.set('Content-Disposition', 'inline');
790+
const responseToCache = new Response(response.body, { status: response.status, headers });
791+
await cache.put(cacheKey, responseToCache.clone());
792+
return responseToCache;
780793
}
781794

782795
async function handleBingImagesRequest(request) {

0 commit comments

Comments
 (0)