mirror of
https://github.com/BlueSkyXN/WorkerJS_CloudFlare_ImageBed.git
synced 2024-11-16 03:32:26 +08:00
0.9.19
阿里图床测试
This commit is contained in:
parent
9f3a0c5676
commit
78fc32eed6
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
|
||||
python-uploader/log.txt
|
||||
python-uploader/ck-ali.txt
|
||||
|
|
|
@ -72,6 +72,7 @@
|
|||
<select class="form-control" id="apiSelect">
|
||||
<option value="ipfs">IPFS-去中心化多网关兼容</option>
|
||||
<option value="58img">58img-定期删图</option>
|
||||
<option value="AliEx">Ali</option>
|
||||
<option value="tgphimg">TGPH-Debug通道</option>
|
||||
<option value="qst8">qst8-国内CDN</option>
|
||||
<option value="vviptuangou">vviptuangou-国内CDN</option>
|
||||
|
|
74
cloudflare-worker-js-api/API_IMG_AliEx.js
Normal file
74
cloudflare-worker-js-api/API_IMG_AliEx.js
Normal file
|
@ -0,0 +1,74 @@
|
|||
export default {
|
||||
async fetch(request, env) {
|
||||
return handleAliExpressRequest(request, env);
|
||||
}
|
||||
};
|
||||
|
||||
async function handleAliExpressRequest(request, env) {
|
||||
try {
|
||||
// 确保请求方法为 POST
|
||||
if (request.method !== 'POST') {
|
||||
return new Response('Method not allowed', { status: 405 });
|
||||
}
|
||||
|
||||
// 解析 multipart/form-data
|
||||
const formData = await request.formData();
|
||||
const imageFile = formData.get('image'); // 假设前端发送的字段名是 'image'
|
||||
if (!imageFile) {
|
||||
return new Response('No image file found in the request', { status: 400 });
|
||||
}
|
||||
|
||||
// 从 Cloudflare KV 中读取 Cookie
|
||||
const cookie = await env.WORKER_IMGBED.get('ali_express_cookie');
|
||||
if (!cookie) {
|
||||
return new Response('Missing required cookie in KV storage', { status: 500 });
|
||||
}
|
||||
|
||||
// 准备发送到 AliExpress 的 FormData
|
||||
const uploadFormData = new FormData();
|
||||
uploadFormData.append('file', imageFile, imageFile.name);
|
||||
uploadFormData.append('bizCode', 'ae_profile_avatar_upload');
|
||||
|
||||
// AliExpress 的上传 URL
|
||||
const uploadUrl = 'https://filebroker.aliexpress.com/x/upload?jiketuchuang=1';
|
||||
|
||||
// 发送请求到 AliExpress 接口
|
||||
const response = await fetch(uploadUrl, {
|
||||
method: 'POST',
|
||||
body: uploadFormData,
|
||||
headers: {
|
||||
'Origin': 'https://filebroker.aliexpress.com',
|
||||
'Cookie': cookie
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.url) {
|
||||
// 如果成功,返回图片 URL
|
||||
return new Response(result.url, {
|
||||
status: 200,
|
||||
headers: { 'Content-Type': 'text/plain' }
|
||||
});
|
||||
} else {
|
||||
// 如果没有返回 URL,则可能上传失败
|
||||
return new Response('Upload failed: No URL returned', { status: 500 });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error in handleAliExpressRequest:', error);
|
||||
return new Response(`Upload failed: ${error.message}`, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
// KV 命名空间设计
|
||||
// 在 Cloudflare 中创建一个名为 "WORKER_IMGBED" 的 KV 命名空间,用于存储不同接口所需的 Cookie。
|
||||
// 使用 "WORKER_IMGBED" 的键 "ali_express_cookie" 来存储具体的 AliExpress Cookie 字符串。
|
||||
|
||||
// 例如,在 wrangler.toml 文件中添加:
|
||||
// [[kv_namespaces]]
|
||||
// binding = "WORKER_IMGBED"
|
||||
// id = "<your_kv_namespace_id>"
|
|
@ -62,6 +62,9 @@ async function handleRequest(request) {
|
|||
case '/upload/tgphimg':
|
||||
response = await handleTgphimgRequest(request);
|
||||
break;
|
||||
case '/upload/aliex':
|
||||
response = await handleAliExpressRequest(request);
|
||||
break;
|
||||
default:
|
||||
response = new Response('Not Found', { status: 404 });
|
||||
break;
|
||||
|
@ -601,70 +604,66 @@ async function handleRequest(request) {
|
|||
console.error('Error:', error);
|
||||
return new Response('Internal Server Error', { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
async function handle10086Request(request) {
|
||||
console.log('Request received:', request.url);
|
||||
|
||||
if (request.method !== 'POST') {
|
||||
return new Response('Method not allowed', { status: 405 });
|
||||
}
|
||||
|
||||
try {
|
||||
const formData = await request.formData();
|
||||
const file = formData.get('image'); // 使用 'image' 字段名
|
||||
if (!file) {
|
||||
return new Response('No file uploaded', { status: 400 });
|
||||
}
|
||||
|
||||
const newFormData = new FormData();
|
||||
newFormData.append('file', file, file.name); // 上传到目标服务器时使用 'file'
|
||||
|
||||
const targetUrl = 'https://mlw10086.serv00.net/upload.php';
|
||||
|
||||
const response = await fetch(targetUrl, {
|
||||
method: 'POST',
|
||||
body: newFormData,
|
||||
headers: {
|
||||
'Accept': '*/*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'DNT': '1',
|
||||
'Origin': 'https://mlw10086.serv00.net',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'https://mlw10086.serv00.net/',
|
||||
'Sec-Ch-Ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Google Chrome";v="128"',
|
||||
'Sec-Ch-Ua-Mobile': '?0',
|
||||
'Sec-Ch-Ua-Platform': '"Windows"',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'same-origin',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Response status:', response.status);
|
||||
const responseText = await response.text();
|
||||
console.log('Response body:', responseText);
|
||||
|
||||
async function handleAliExpressRequest(request, env) {
|
||||
try {
|
||||
const jsonResponse = JSON.parse(responseText);
|
||||
if (jsonResponse.code === 200 && jsonResponse.url) {
|
||||
return new Response(jsonResponse.url, {
|
||||
// 确保请求方法为 POST
|
||||
if (request.method !== 'POST') {
|
||||
return new Response('Method not allowed', { status: 405 });
|
||||
}
|
||||
|
||||
// 解析 multipart/form-data
|
||||
const formData = await request.formData();
|
||||
const imageFile = formData.get('image'); // 假设前端发送的字段名是 'image'
|
||||
if (!imageFile) {
|
||||
return new Response('No image file found in the request', { status: 400 });
|
||||
}
|
||||
|
||||
// 从 Cloudflare KV 中读取 Cookie
|
||||
const cookie = await env.WORKER_IMGBED.get('ali_express_cookie');
|
||||
if (!cookie) {
|
||||
return new Response('Missing required cookie in KV storage', { status: 500 });
|
||||
}
|
||||
|
||||
// 准备发送到 AliExpress 的 FormData
|
||||
const uploadFormData = new FormData();
|
||||
uploadFormData.append('file', imageFile, imageFile.name);
|
||||
uploadFormData.append('bizCode', 'ae_profile_avatar_upload');
|
||||
|
||||
// AliExpress 的上传 URL
|
||||
const uploadUrl = 'https://filebroker.aliexpress.com/x/upload?jiketuchuang=1';
|
||||
|
||||
// 发送请求到 AliExpress 接口
|
||||
const response = await fetch(uploadUrl, {
|
||||
method: 'POST',
|
||||
body: uploadFormData,
|
||||
headers: {
|
||||
'Origin': 'https://filebroker.aliexpress.com',
|
||||
'Cookie': cookie
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.url) {
|
||||
// 如果成功,返回图片 URL
|
||||
return new Response(result.url, {
|
||||
status: 200,
|
||||
headers: { 'Content-Type': 'text/plain' }
|
||||
});
|
||||
} else {
|
||||
// 如果没有返回 URL,则可能上传失败
|
||||
return new Response('Upload failed: No URL returned', { status: 500 });
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Failed to parse JSON:', e);
|
||||
} catch (error) {
|
||||
console.error('Error in handleAliExpressRequest:', error);
|
||||
return new Response(`Upload failed: ${error.message}`, { status: 500 });
|
||||
}
|
||||
|
||||
return new Response(responseText, {
|
||||
status: response.status,
|
||||
headers: response.headers
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
return new Response('Internal Server Error', { status: 500 });
|
||||
}
|
||||
}
|
||||
|
78
python-uploader/test-ali.py
Normal file
78
python-uploader/test-ali.py
Normal file
|
@ -0,0 +1,78 @@
|
|||
import requests
|
||||
import os
|
||||
import random
|
||||
|
||||
# 上传图片的本地路径
|
||||
image_path = r"F:\Download\20241011-111233.jpg"
|
||||
|
||||
# AliExpress 上传接口的 URL
|
||||
upload_url = "https://filebroker.aliexpress.com/x/upload?jiketuchuang=1"
|
||||
|
||||
# 允许的主机名
|
||||
cdn_hosts = ["ae01", "ae02", "ae03", "ae04", "ae05"]
|
||||
|
||||
def load_cookie(file_path):
|
||||
if os.path.exists(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
return file.read().strip()
|
||||
else:
|
||||
print(f"错误: Cookie 文件不存在。文件路径: {file_path}")
|
||||
return None
|
||||
|
||||
def upload_image(image_path):
|
||||
if not os.path.exists(image_path):
|
||||
print("错误: 图片文件不存在。")
|
||||
return
|
||||
|
||||
# 加载 Cookie
|
||||
cookie_path = r"G:\Github\WorkerJS_CloudFlare_ImageBed\python-uploader\ck-ali.txt"
|
||||
cookie = load_cookie(cookie_path)
|
||||
if not cookie:
|
||||
return
|
||||
|
||||
# 请求头设置
|
||||
headers = {
|
||||
"Origin": "https://filebroker.aliexpress.com",
|
||||
"Cookie": cookie
|
||||
}
|
||||
|
||||
# 文件参数
|
||||
files = {
|
||||
'file': (os.path.basename(image_path), open(image_path, 'rb'))
|
||||
}
|
||||
|
||||
# 其他参数
|
||||
data = {
|
||||
"bizCode": "ae_profile_avatar_upload"
|
||||
}
|
||||
|
||||
try:
|
||||
# 发送 POST 请求上传图片
|
||||
response = requests.post(upload_url, headers=headers, files=files, data=data)
|
||||
response.raise_for_status() # 检查请求是否成功
|
||||
result = response.json()
|
||||
|
||||
# 处理返回结果
|
||||
if result.get("code") == 0:
|
||||
# 上传成功,随机选择一个 CDN 主机名
|
||||
url = result.get("url")
|
||||
if url:
|
||||
selected_host = random.choice(cdn_hosts)
|
||||
final_url = url.replace("ae02", selected_host)
|
||||
print(f"上传成功,图片 URL: {final_url}")
|
||||
else:
|
||||
print("上传失败:未返回图片 URL。")
|
||||
else:
|
||||
print("上传失败,请检查是否已登录阿里巴巴账号?")
|
||||
login_confirm = input("是否前往登录页面?(y/n): ")
|
||||
if login_confirm.lower() == 'y':
|
||||
print("请前往登录页面:https://best.aliexpress.com/")
|
||||
except requests.exceptions.RequestException as e:
|
||||
# 网络请求异常处理
|
||||
print(f"请求失败: {e}")
|
||||
except ValueError:
|
||||
# JSON 解码失败
|
||||
print("上传失败:无法解析服务器返回的响应。")
|
||||
|
||||
# 执行图片上传
|
||||
upload_image(image_path)
|
Loading…
Reference in New Issue
Block a user