针对上传文件进行处理

This commit is contained in:
2023-12-25 23:44:26 +08:00
parent 4863fcb199
commit f9d84526a2
4 changed files with 8056 additions and 6183 deletions

View File

@@ -1,11 +1,13 @@
/**
利用chrome的fetch来避免跨域
**/
import {getImageMd5} from "@/utils/image";
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.type == 'api') {
let headers = {}, data;
new Promise((resolve) => {
let headers = {};
let data = null;
if (request.needMallId) {
headers.Mallid = request.mallId;
}
@@ -25,29 +27,20 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
formData.append(key + `[${i}]`, subValue)
})
} else {
if (key == 'image') {
let blob = new Blob([request.data[key]], {type: 'application/png'})
// formData.append(key, new Blob([request.data[key]], {type: 'application/png'}))
formData.append(key, blob)
} else {
formData.append(key, request.data[key])
}
if (key == "image") {
//跳过image的处理
} else formData.append(key, request.data[key])
}
})
data = formData
}
headers.cookie = getCookie();
Promise.resolve().then(() => fetch(request.url, {
'headers': headers,
'method': 'POST',
'referrerPolicy': 'no-referrer',
'credentials': 'include',
'body': data,
'mode': 'cors'
})).then((res) => {
resolve(res.json());
});
}).then(sendResponse);
if (request.isFormData && !!request.data.image) {//针对图片上传特殊的处理办法
getImageMd5(request.data.image).then(res => data.append('image', res.image.blobData)).then(resolve)
} else resolve()
}).then(() => fetch(request.url, {
headers, 'method': 'POST', 'referrerPolicy': 'no-referrer', 'credentials': 'include', 'body': data, 'mode': 'cors'
})).then(res => res.json()).then(sendResponse);
} else if (request.type == 'temuApi') {
new Promise((resolve) => {
let headers = {};
@@ -57,12 +50,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
headers['Content-Type'] = 'application/json';
headers.cookie = getTemuCookie();
Promise.resolve().then(() => fetch(request.url, {
'headers': headers,
'method': 'POST',
'referrerPolicy': 'no-referrer',
'credentials': 'include',
'body': JSON.stringify(request.data),
'mode': 'cors'
'headers': headers, 'method': 'POST', 'referrerPolicy': 'no-referrer', 'credentials': 'include', 'body': JSON.stringify(request.data), 'mode': 'cors'
})).then((res) => {
resolve(res.json());
}).catch(() => {
@@ -75,10 +63,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
headers['Content-Type'] = 'text/html';
//headers.cookie = getTemuCookie();
Promise.resolve().then(() => fetch(request.url, {
'headers': headers,
'method': 'GET',
'referrerPolicy': 'no-referrer',
//'credentials': 'include',
'headers': headers, 'method': 'GET', 'referrerPolicy': 'no-referrer', //'credentials': 'include',
'mode': 'cors'
})).then((res) => {
// 创建了一个数据读取器
@@ -108,11 +93,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
headers['Content-Type'] = 'text/html';
headers.cookie = getAliexpressCookie();
Promise.resolve().then(() => fetch(request.url, {
'headers': headers,
'method': 'GET',
'referrerPolicy': 'no-referrer',
'credentials': 'include',
'mode': 'cors'
'headers': headers, 'method': 'GET', 'referrerPolicy': 'no-referrer', 'credentials': 'include', 'mode': 'cors'
})).then((res) => {
// 创建了一个数据读取器
const reader = res.body.getReader();
@@ -143,25 +124,15 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
request.params = formatParams(request.params)
let _url = request.url + (request.params ? ('?' + request.params) : '')
Promise.resolve().then(() => fetch(_url, {
'headers': headers,
'method': request.method,
'referrerPolicy': 'no-referrer',
'credentials': 'include',
'body': JSON.stringify(request.data),
'mode': 'cors'
'headers': headers, 'method': request.method, 'referrerPolicy': 'no-referrer', 'credentials': 'include', 'body': JSON.stringify(request.data), 'mode': 'cors'
})).then((res) => {
resolve(res.json());
});
}).then(sendResponse);
} else if (request.type == 'notify') {
chrome.notifications.create(
"" + Math.random(), {
type: "basic",
title: "TEMU助手",
message: "您店铺【" + request.mallName + "】的商品【" + request.productName + "】成功加入发货台,请尽快处理",
iconUrl: "./icons/48.png"
}, null
)
chrome.notifications.create("" + Math.random(), {
type: "basic", title: "TEMU助手", message: "您店铺【" + request.mallName + "】的商品【" + request.productName + "】成功加入发货台,请尽快处理", iconUrl: "./icons/48.png"
}, null)
}
return true;
@@ -178,8 +149,7 @@ chrome.action.onClicked.addListener(function () {
chrome.webRequest.onSendHeaders.addListener(details => {
if (details.url && (details.url.indexOf('joinDeliveryGoodsOrderPlatform') != -1)) {
details.requestHeaders.push({
name: 'Referer',
value: 'https://kuajing.pinduoduo.com/main/order-manage'
name: 'Referer', value: 'https://kuajing.pinduoduo.com/main/order-manage'
})
for (let i = 0; i < details.requestHeaders.length; i++) {
if (details.requestHeaders[i].name == 'Origin') {
@@ -189,8 +159,7 @@ chrome.webRequest.onSendHeaders.addListener(details => {
}
} else if (details.url && (details.url.indexOf('mms/userInfo') != -1)) {
details.requestHeaders.push({
name: 'Referer',
value: 'https://kuajing.pinduoduo.com/main/order-manage'
name: 'Referer', value: 'https://kuajing.pinduoduo.com/main/order-manage'
})
for (let i = 0; i < details.requestHeaders.length; i++) {
if (details.requestHeaders[i].name == 'Origin') {
@@ -199,8 +168,7 @@ chrome.webRequest.onSendHeaders.addListener(details => {
}
}
}
},
{urls: ["<all_urls>"]},["requestHeaders", "extraHeaders"]);
}, {urls: ["<all_urls>"]}, ["requestHeaders", "extraHeaders"]);
function getCookie() {

View File

@@ -25,25 +25,22 @@ export function getImageMd5(imageUrl) {
});*/
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
fetch(imageUrl).then((response) => response.blob()) // 将响应转换为Blob对象
.then((blobData) => {
const fileName = imageUrl.match(/\/([^/]+)$/).at(-1)
const reader = new FileReader();
// 读取Blob对象的内容
reader.onloadend = function () {
let spark = new SparkMd5.ArrayBuffer()
spark.append(this.result);
let md5 = spark.end()
const spark = new SparkMd5.ArrayBuffer()
spark.append(reader.result);
const md5 = spark.end()
// formData.append('md5', md5)
//resolve({md5, imageData: new File([blobData], 'test.jpeg', {type: blobData.type})});
resolve({md5, imageData: this.result});
const image = {blobData, fileName}
resolve({md5, image});
};
reader.readAsArrayBuffer(blobData); // 将Blob对象作为参数传递给FileReader的readAsArrayBuffer()方法
})
});
}

View File

@@ -71,6 +71,7 @@
import AiCopyFromAliExpress from "@/components/AiCopyFromAliExpress.vue";
import {sendChromeAPIMessage} from '@/api/chromeApi'
import {getImageMd5} from "@/utils/image.js"
export default {
name: 'NiubiCopy',
components: {AiCopyFromAliExpress},
@@ -102,10 +103,10 @@ import { getImageMd5 } from "@/utils/image.js"
methods: {
async getList() {
let res2 = await getImageMd5('http://temu.jjcp52.com/dist/test.png')
console.log(res2)
let res3 = await sendChromeAPIMessage({
const image = 'http://temu.jjcp52.com/dist/test.png'
let res2 = await getImageMd5(image), res4
Promise.all([
sendChromeAPIMessage({
url: 'marvel-mms/cn/api/kiana/gmp/bg/phoenix/api/material/create',
needMallId: true,
mallId: '634418212443160',
@@ -115,36 +116,32 @@ import { getImageMd5 } from "@/utils/image.js"
{
materialType: 1,
materialMd5: res2.md5,
materialName: "test.png"
materialName: "test"
}
]
}
})
let res4 = await sendChromeAPIMessage({
}),
sendChromeAPIMessage({
url: 'galerie/business/get_signature?sdk_version=js-0.0.16-alpha.0&tag_name=product-material-tag',
needMallId: true,
mallId: '634418212443160',
data: {
bucket_tag: "product-material-tag"
}
})
let res5 = await sendChromeAPIMessage({
}).then(res => res4 = res)
]).then(() => sendChromeAPIMessage({
url: 'https://kuajing-file.pinduoduo.com/api/galerie/v3/store_image?sdk_version=js-0.0.16-alpha.0&tag_name=product-material-tag',
isFormData: true,
data: {
url_width_height: true,
image: new Uint8Array(res2.imageData),
image,
upload_sign: res4.result.signature
}
})
console.log(res5)
this.$http.post('/api/copyProduct/myPage',null,{
})).then(() => this.$http.post('/api/copyProduct/myPage', null, {
params: {
...this.search
}
}).then(res => {
})).then(res => {
this.tableData = res.data.records
this.total = res.data.total
})

13895
yarn.lock

File diff suppressed because it is too large Load Diff