Telegraph-Image
Telegraph-Image copied to clipboard
大佬,可以上传原图吗?文件没有超过5m
本来的图片是226kb,上传之后变成52kb了,压缩的都有点模糊了......
应该是上传时TG自动压缩的,操作不了
应该是上传时TG自动压缩的,操作不了
但是直接在TG频道里发图片的时候,不是会让你选择以原图上传或者以压缩方式上传么...
应该是上传时TG自动压缩的,操作不了
但是直接在TG频道里发图片的时候,不是会让你选择以原图上传或者以压缩方式上传么...
图片最大可以上传10MB,因为用的sendPhoto接口,会自动压缩。如果统一换成sendDocument接口可以实现原大小上传(免费用户最大支持50MB)
应该是上传时TG自动压缩的,操作不了
但是直接在TG频道里发图片的时候,不是会让你选择以原图上传或者以压缩方式上传么...
你可以直接将upload.js改为只用sendDocument的版本:
import { errorHandling, telemetryData } from "./utils/middleware";
export async function onRequestPost(context) {
const { request, env } = context;
try {
const clonedRequest = request.clone();
const formData = await clonedRequest.formData();
await errorHandling(context);
telemetryData(context);
const uploadFile = formData.get('file');
if (!uploadFile) {
throw new Error('No file uploaded');
}
const fileName = uploadFile.name;
const fileExtension = fileName.split('.').pop().toLowerCase();
const telegramFormData = new FormData();
telegramFormData.append("chat_id", env.TG_Chat_ID);
// 根据文件类型选择合适的上传方式
let apiEndpoint;
// if (uploadFile.type.startsWith('image/')) {
// telegramFormData.append("photo", uploadFile);
// apiEndpoint = 'sendPhoto';
// } else if (uploadFile.type.startsWith('audio/')) {
// telegramFormData.append("audio", uploadFile);
// apiEndpoint = 'sendAudio';
// } else {
telegramFormData.append("document", uploadFile);
apiEndpoint = 'sendDocument';
// }
const apiUrl = `https://api.telegram.org/bot${env.TG_Bot_Token}/${apiEndpoint}`;
console.log('Sending request to:', apiUrl);
const response = await fetch(
apiUrl,
{
method: "POST",
body: telegramFormData
}
);
console.log('Response status:', response.status);
const responseData = await response.json();
if (!response.ok) {
console.error('Error response from Telegram API:', responseData);
throw new Error(responseData.description || 'Upload to Telegram failed');
}
const fileId = getFileId(responseData);
if (!fileId) {
throw new Error('Failed to get file ID');
}
// 将文件信息保存到 KV 存储
if (env.img_url) {
await env.img_url.put(`${fileId}.${fileExtension}`, "", {
metadata: {
TimeStamp: Date.now(),
ListType: "None",
Label: "None",
liked: false,
fileName: fileName,
fileSize: uploadFile.size,
}
});
}
return new Response(
JSON.stringify([{ 'src': `/file/${fileId}.${fileExtension}` }]),
{
status: 200,
headers: { 'Content-Type': 'application/json' }
}
);
} catch (error) {
console.error('Upload error:', error);
return new Response(
JSON.stringify({ error: error.message }),
{
status: 500,
headers: { 'Content-Type': 'application/json' }
}
);
}
}
function getFileId(response) {
if (!response.ok || !response.result) return null;
const result = response.result;
// if (result.photo) {
// return result.photo.reduce((prev, current) =>
// (prev.file_size > current.file_size) ? prev : current
// ).file_id;
// }
if (result.document) return result.document.file_id;
// if (result.video) return result.video.file_id;
// if (result.audio) return result.audio.file_id;
return null;
}
代价是没有自动压缩,要在TG上浏览原图的话需要下载,参考图(其一为sendPhoto,其二为sendDocument):
代价是没有自动压缩,要在TG上浏览原图的话需要下载,参考图(其一为
sendPhoto,其二为sendDocument):
好的,谢谢大佬。 另外,请问,我是直接复制你上面贴的代码,然后修改我仓库里的upload.js这个文件吗?是可以ctrl+a全选了然后ctrl+v一键替换的那种吗。哈哈哈,我感觉我这问题问得有点过分.....抱歉
代价是没有自动压缩,要在TG上浏览原图的话需要下载,参考图(其一为
sendPhoto,其二为sendDocument):好的,谢谢大佬。 另外,请问,我是直接复制你上面贴的代码,然后修改我仓库里的upload.js这个文件吗?是可以ctrl+a全选了然后ctrl+v一键替换的那种吗。哈哈哈,我感觉我这问题问得有点过分.....抱歉
是的,我这边测试过,应该没问题。
代价是没有自动压缩,要在TG上浏览原图的话需要下载,参考图(其一为
sendPhoto,其二为sendDocument):好的,谢谢大佬。 另外,请问,我是直接复制你上面贴的代码,然后修改我仓库里的upload.js这个文件吗?是可以ctrl+a全选了然后ctrl+v一键替换的那种吗。哈哈哈,我感觉我这问题问得有点过分.....抱歉
是的,我这边测试过,应该没问题。
那以后这个仓库更新了,我账户的仓库同步了之后,是不是又要这样操作一遍....
代价是没有自动压缩,要在TG上浏览原图的话需要下载,参考图(其一为
sendPhoto,其二为sendDocument):好的,谢谢大佬。 另外,请问,我是直接复制你上面贴的代码,然后修改我仓库里的upload.js这个文件吗?是可以ctrl+a全选了然后ctrl+v一键替换的那种吗。哈哈哈,我感觉我这问题问得有点过分.....抱歉
是的,我这边测试过,应该没问题。
那以后这个仓库更新了,我账户的仓库同步了之后,是不是又要这样操作一遍....
是的,除非仓库也改为只用sendDocument上传
