mirror of
https://github.com/BlueSkyXN/WorkerJS_CloudFlare_ImageBed.git
synced 2024-11-16 11:42:33 +08:00
116 lines
3.7 KiB
JavaScript
116 lines
3.7 KiB
JavaScript
// Github @BlueSkyXN
|
||
// Code https://gist.github.com/BlueSkyXN/0be89e736cd2fe0418f77c034538c502
|
||
// 仅供学习CloudFlare Worker开发使用,违规使用后果自负
|
||
// License @GPLv3
|
||
// 记得修改98行左右的域名/URL为你的Worker的API节点,注意58图床会删图,只能临时、短期学习使用
|
||
|
||
|
||
addEventListener('fetch', event => {
|
||
event.respondWith(handleRequest(event.request))
|
||
})
|
||
|
||
async function handleRequest(request) {
|
||
if (request.method === 'POST') {
|
||
try {
|
||
const requestBody = await request.json();
|
||
const base64Data = requestBody.base64Data;
|
||
|
||
const targetURL = "https://upload.58cdn.com.cn/json";
|
||
const payload = {
|
||
"Pic-Size": "0*0",
|
||
"Pic-Encoding": "base64",
|
||
"Pic-Path": "/nowater/webim/big/",
|
||
"Pic-Data": base64Data
|
||
};
|
||
|
||
const targetResponse = await fetch(targetURL, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify(payload)
|
||
});
|
||
|
||
const result = await targetResponse.text();
|
||
return new Response('https://pic1.58cdn.com.cn/nowater/webim/big/' + result, {
|
||
headers: { 'content-type': 'text/plain' },
|
||
});
|
||
} catch (error) {
|
||
return new Response('Error processing request: ' + error.message, { status: 500 });
|
||
}
|
||
} else if (request.method === 'GET') {
|
||
return new Response(htmlContent, {
|
||
headers: { 'content-type': 'text/html' },
|
||
});
|
||
}
|
||
}
|
||
|
||
const htmlContent = `
|
||
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>58免费图床</title>
|
||
<!--
|
||
// 仅供学习CloudFlare Worker开发使用,违规使用后果自负
|
||
// License @GPLv3
|
||
-->
|
||
<style>
|
||
body {
|
||
text-align: center;
|
||
}
|
||
#title {
|
||
color: blue;
|
||
font-size: 24px;
|
||
margin-bottom: 20px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="title">58免费图床</div>
|
||
<input type="file" id="fileInput">
|
||
<button onclick="uploadFile()">上传</button>
|
||
<hr>
|
||
<div id="tips">
|
||
<div>建议上传5M以内的JPG/PNG文件</div>
|
||
<div>该图床会在一定时间后删除图片</div>
|
||
<div>图床支持pic1-8之间的任意子域名</div>
|
||
<div>该源码开源,仅供学习JS使用,违规使用后果自负</div>
|
||
</div>
|
||
<hr>
|
||
<div id="result">
|
||
<a href="" id="resultLink" target="_blank"></a>
|
||
</div>
|
||
|
||
<script>
|
||
async function uploadFile() {
|
||
const fileInput = document.getElementById('fileInput');
|
||
const file = fileInput.files[0];
|
||
|
||
if (!file) {
|
||
alert('请先选择一个文件');
|
||
return;
|
||
}
|
||
|
||
const reader = new FileReader();
|
||
|
||
reader.onloadend = async function() {
|
||
try {
|
||
const base64String = reader.result.replace(/^data:.+;base64,/, '');
|
||
const response = await fetch('https://58imgbed.yourname.workers.dev/', {
|
||
method: 'POST',
|
||
body: JSON.stringify({ base64Data: base64String })
|
||
});
|
||
const resultUrl = await response.text();
|
||
document.getElementById('resultLink').href = resultUrl;
|
||
document.getElementById('resultLink').innerText = resultUrl;
|
||
} catch (error) {
|
||
alert('上传失败,请重试。');
|
||
}
|
||
}
|
||
|
||
reader.readAsDataURL(file);
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|
||
`;
|