From 73126c07fa85e875e1f4ef245fe2602c94e75834 Mon Sep 17 00:00:00 2001 From: BlueSkyXN <63384277+BlueSkyXN@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:21:31 +0800 Subject: [PATCH] 0.10.11 --- cloudflare-page/OneAPI-imgbed-MIX.html | 1 + cloudflare-worker-js-api/API_IMG_mtdp.js | 95 +++++++++++++++++++++ cloudflare-worker-js-api/worker.js | 102 ++++++++++++++++++++++- python-uploader/test-mtdp2.py | 55 ++++++++++++ 4 files changed, 252 insertions(+), 1 deletion(-) create mode 100644 cloudflare-worker-js-api/API_IMG_mtdp.js create mode 100644 python-uploader/test-mtdp2.py diff --git a/cloudflare-page/OneAPI-imgbed-MIX.html b/cloudflare-page/OneAPI-imgbed-MIX.html index 07eebd2..e56ed0d 100644 --- a/cloudflare-page/OneAPI-imgbed-MIX.html +++ b/cloudflare-page/OneAPI-imgbed-MIX.html @@ -77,6 +77,7 @@ +
diff --git a/cloudflare-worker-js-api/API_IMG_mtdp.js b/cloudflare-worker-js-api/API_IMG_mtdp.js new file mode 100644 index 0000000..236e78a --- /dev/null +++ b/cloudflare-worker-js-api/API_IMG_mtdp.js @@ -0,0 +1,95 @@ +async function handleMtDpRequest(request) { + console.log('Request received for DP upload:', 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 fileName = file.name; + const fileType = file.type; // 如 'image/jpeg' + const fileSize = file.size; + + // 生成新的文件名(使用 MD5 和随机数) + const timeStamp = new Date().getTime().toString(); + const randomNum = Math.floor(Math.random() * 100000).toString(); + const hash = await crypto.subtle.digest('MD5', new TextEncoder().encode(timeStamp + randomNum)); + const hashArray = Array.from(new Uint8Array(hash)); + const md5Hash = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + const newFileName = md5Hash + '.' + fileName.split('.').pop(); + + // 获取文件的最后修改时间(GMT 格式) + const lastModifiedDate = new Date().toUTCString(); + + // 创建新的 FormData,用于发送到大众点评的接口 + const dpFormData = new FormData(); + dpFormData.append('id', 'WU_FILE_0'); // 固定值 + dpFormData.append('name', newFileName); + dpFormData.append('type', fileType); + dpFormData.append('lastModifiedDate', lastModifiedDate); + dpFormData.append('size', fileSize); + dpFormData.append('file', file, newFileName); // 文件字段名为 'file' + + // 设置必要的头部信息 + const dpHeaders = { + 'Accept': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + }; + + // 大众点评的上传接口 URL + const dpUrl = 'https://trust.dianping.com/upload.action'; + + // 发送请求到大众点评接口 + const response = await fetch(dpUrl, { + method: 'POST', + headers: dpHeaders, + body: dpFormData + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`Upload failed: Status ${response.status}, Body: ${errorText}`); + return new Response(`Upload failed: ${errorText}`, { status: response.status }); + } + + // 解析大众点评接口的响应 + const responseData = await response.json(); + console.log('Response from DP API:', responseData); + + if (responseData && responseData.isSuccess) { + let url = responseData.url; + + // 转为 HTTPS 协议 + url = url.replace('http://', 'https://'); + + // 随机替换域名前缀 + const prefixes = ['img', 'p0', 'p1', 'p2']; + const randomPrefix = prefixes[Math.floor(Math.random() * prefixes.length)]; + url = url.replace(/\/\/p0\./, `//${randomPrefix}.`); + + // 成功,返回图片 URL + return new Response(url, { + status: 200, + headers: { + 'Content-Type': 'text/plain', + 'Access-Control-Allow-Origin': '*' // 根据需要调整 CORS 策略 + } + }); + } else { + console.error('Upload failed:', responseData); + return new Response('Upload failed', { status: 500 }); + } + } catch (error) { + console.error('Error in handleDpUploadRequest:', error); + return new Response('Internal Server Error', { status: 500 }); + } +} diff --git a/cloudflare-worker-js-api/worker.js b/cloudflare-worker-js-api/worker.js index 9343fbc..b7f1050 100644 --- a/cloudflare-worker-js-api/worker.js +++ b/cloudflare-worker-js-api/worker.js @@ -68,6 +68,9 @@ async function handleRequest(request) { case '/upload/jdkf': response = await handlejdkfRequest(request); break; + case '/upload/mtdp': + response = await handleMtDpRequest(request); + break; default: response = new Response('Not Found', { status: 404 }); break; @@ -413,7 +416,7 @@ async function handleRequest(request) { // 构建图片访问链接 //const accessUrl = `https://cdn.img2ipfs.com/ipfs/${fileHash}?filename=${fileName}`; - const accessUrl = `https://i0.wp.com/eth.sucks/ipfs/${fileHash}`; + const accessUrl = `https://i0.wp.com/i0.img2ipfs.com/ipfs/${fileHash}`; console.log(`图片访问链接: ${accessUrl}`); // 返回成功的链接 @@ -663,4 +666,101 @@ async function handleRequest(request) { return new Response('Internal Server Error', { status: 500 }); } } + + + async function handleMtDpRequest(request) { + console.log('Request received for DP upload:', 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 fileName = file.name; + const fileType = file.type; // 如 'image/jpeg' + const fileSize = file.size; + + // 生成新的文件名(使用 MD5 和随机数) + const timeStamp = new Date().getTime().toString(); + const randomNum = Math.floor(Math.random() * 100000).toString(); + const hash = await crypto.subtle.digest('MD5', new TextEncoder().encode(timeStamp + randomNum)); + const hashArray = Array.from(new Uint8Array(hash)); + const md5Hash = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + const newFileName = md5Hash + '.' + fileName.split('.').pop(); + + // 获取文件的最后修改时间(GMT 格式) + const lastModifiedDate = new Date().toUTCString(); + + // 创建新的 FormData,用于发送到大众点评的接口 + const dpFormData = new FormData(); + dpFormData.append('id', 'WU_FILE_0'); // 固定值 + dpFormData.append('name', newFileName); + dpFormData.append('type', fileType); + dpFormData.append('lastModifiedDate', lastModifiedDate); + dpFormData.append('size', fileSize); + dpFormData.append('file', file, newFileName); // 文件字段名为 'file' + + // 设置必要的头部信息 + const dpHeaders = { + 'Accept': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + }; + + // 大众点评的上传接口 URL + const dpUrl = 'https://trust.dianping.com/upload.action'; + + // 发送请求到大众点评接口 + const response = await fetch(dpUrl, { + method: 'POST', + headers: dpHeaders, + body: dpFormData + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`Upload failed: Status ${response.status}, Body: ${errorText}`); + return new Response(`Upload failed: ${errorText}`, { status: response.status }); + } + + // 解析大众点评接口的响应 + const responseData = await response.json(); + console.log('Response from DP API:', responseData); + + if (responseData && responseData.isSuccess) { + let url = responseData.url; + + // 转为 HTTPS 协议 + url = url.replace('http://', 'https://'); + + // 随机替换域名前缀 + const prefixes = ['img', 'p0', 'p1', 'p2']; + const randomPrefix = prefixes[Math.floor(Math.random() * prefixes.length)]; + url = url.replace(/\/\/p0\./, `//${randomPrefix}.`); + + // 成功,返回图片 URL + return new Response(url, { + status: 200, + headers: { + 'Content-Type': 'text/plain', + 'Access-Control-Allow-Origin': '*' // 根据需要调整 CORS 策略 + } + }); + } else { + console.error('Upload failed:', responseData); + return new Response('Upload failed', { status: 500 }); + } + } catch (error) { + console.error('Error in handleDpUploadRequest:', error); + return new Response('Internal Server Error', { status: 500 }); + } + } \ No newline at end of file diff --git a/python-uploader/test-mtdp2.py b/python-uploader/test-mtdp2.py new file mode 100644 index 0000000..2205e61 --- /dev/null +++ b/python-uploader/test-mtdp2.py @@ -0,0 +1,55 @@ +import requests +import hashlib +import time +import os +import random + +def upload_image(file_path): + api_url = "https://trust.dianping.com/upload.action" + + # 获取文件名和 MIME 类型 + file_name = os.path.basename(file_path) + file_type = "image/jpeg" # 根据文件实际类型修改,例如 'image/png' + + # 生成 MD5 作为新文件名 + new_file_name = hashlib.md5(str(time.time()).encode()).hexdigest() + os.path.splitext(file_name)[1] + + # 获取文件的大小 + file_size = os.path.getsize(file_path) + + # 使用 GMT 格式的最后修改时间 + last_modified_date = time.strftime('%a %b %d %Y %H:%M:%S GMT', time.gmtime(os.path.getmtime(file_path))) + + # 上传请求的参数 + post_data = { + "id": "WU_FILE_0", + "name": new_file_name, + "type": file_type, + "lastModifiedDate": last_modified_date, + "size": file_size, + } + + # 打开文件并准备上传 + with open(file_path, 'rb') as file: + files = { + "file": (new_file_name, file, file_type) + } + # 发起请求 + response = requests.post(api_url, data=post_data, files=files) + + # 检查响应结果 + if response.status_code == 200: + response_data = response.json() + if response_data.get("isSuccess") == True: + url = response_data["url"] + # 随机替换前缀 + prefix = random.choice(["img", "p0", "p1", "p2"]) + url = url.replace("p0.", f"{prefix}.").replace("http://", "https://") + print("Upload successful:", url) + else: + print("Upload failed:", response_data.get("msg", "Unknown error")) + else: + print("HTTP error:", response.status_code, response.text) + +# 调用上传函数,使用测试图片路径 +upload_image(r"F:\Download\E9601BA8FB0DC48A8DF40509CD48069C (1).jpg")