diff --git a/src/entry/background.js b/src/entry/background.js index 2784562..47529c9 100644 --- a/src/entry/background.js +++ b/src/entry/background.js @@ -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) => { // 创建了一个数据读取器 @@ -87,7 +72,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { const decoder = new TextDecoder(); let text = "" - reader.read().then(function processText({ done, value }) { + reader.read().then(function processText({done, value}) { // Result 对象包含了两个属性: // done - 当 stream 传完所有数据时则变成 true // value - 数据片段。当 done 为 true 时始终为 undefined @@ -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(); @@ -120,7 +101,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { const decoder = new TextDecoder(); let text = "" - reader.read().then(function processText({ done, value }) { + reader.read().then(function processText({done, value}) { // Result 对象包含了两个属性: // done - 当 stream 传完所有数据时则变成 true // value - 数据片段。当 done 为 true 时始终为 undefined @@ -141,27 +122,17 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { headers['Content-Type'] = 'application/json'; headers.cookie = getSheinCookie() request.params = formatParams(request.params) - let _url = request.url + (request.params ? ('?' + 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; @@ -176,31 +147,28 @@ chrome.action.onClicked.addListener(function () { }); chrome.webRequest.onSendHeaders.addListener(details => { - if (details.url && (details.url.indexOf('joinDeliveryGoodsOrderPlatform') != -1)) { + 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++) { + for (let i = 0; i < details.requestHeaders.length; i++) { if (details.requestHeaders[i].name == 'Origin') { details.requestHeaders[i].value = 'https://kuajing.pinduoduo.com' break; } } - } else if (details.url && (details.url.indexOf('mms/userInfo') != -1)) { + } 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++) { + for (let i = 0; i < details.requestHeaders.length; i++) { if (details.requestHeaders[i].name == 'Origin') { details.requestHeaders[i].value = 'https://kuajing.pinduoduo.com' break; } } } -}, -{urls: [""]},["requestHeaders", "extraHeaders"]); +}, {urls: [""]}, ["requestHeaders", "extraHeaders"]); function getCookie() { @@ -254,4 +222,4 @@ function formatParams(data) { arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])) } return arr.join("&") -} \ No newline at end of file +} diff --git a/src/utils/image.js b/src/utils/image.js index 6733c4b..efa141c 100644 --- a/src/utils/image.js +++ b/src/utils/image.js @@ -1,49 +1,46 @@ import SparkMd5 from 'spark-md5' export function getImageMd5(imageUrl) { - /*return new Promise((resolve, reject) => { - fetch(imageUrl).then((response) => response.blob()) // 将响应转换为Blob对象 - .then((blobData) => { - const reader = new FileReader(); - - // 读取Blob对象的内容 - reader.onloadend = function() { - let spark = new SparkMd5() - spark.appendBinary(this.result); - let md5 = spark.end() - console.log(md5) - console.log(this.result) + /*return new Promise((resolve, reject) => { + fetch(imageUrl).then((response) => response.blob()) // 将响应转换为Blob对象 + .then((blobData) => { + const reader = new FileReader(); - //resolve({md5, imageData: new File([blobData], 'test.jpeg', {type: blobData.type})}); - resolve({md5, imageData: this.result}); - }; - - reader.readAsBinaryString(blobData); // 将Blob对象作为参数传递给FileReader的readAsArrayBuffer()方法 + // 读取Blob对象的内容 + reader.onloadend = function() { + let spark = new SparkMd5() + spark.appendBinary(this.result); + let md5 = spark.end() + console.log(md5) + console.log(this.result) - - }) + //resolve({md5, imageData: new File([blobData], 'test.jpeg', {type: blobData.type})}); + resolve({md5, imageData: this.result}); + }; - });*/ + reader.readAsBinaryString(blobData); // 将Blob对象作为参数传递给FileReader的readAsArrayBuffer()方法 - return new Promise((resolve, reject) => { - fetch(imageUrl).then((response) => response.blob()) // 将响应转换为Blob对象 - .then((blobData) => { - const reader = new FileReader(); - - // 读取Blob对象的内容 - reader.onloadend = function() { - let spark = new SparkMd5.ArrayBuffer() - spark.append(this.result); - let md5 = spark.end() - //resolve({md5, imageData: new File([blobData], 'test.jpeg', {type: blobData.type})}); - resolve({md5, imageData: this.result}); - }; - - reader.readAsArrayBuffer(blobData); // 将Blob对象作为参数传递给FileReader的readAsArrayBuffer()方法 + }) - - }) + });*/ - }); -} \ No newline at end of file + 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 () { + 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})}); + const image = {blobData, fileName} + resolve({md5, image}); + }; + reader.readAsArrayBuffer(blobData); // 将Blob对象作为参数传递给FileReader的readAsArrayBuffer()方法 + }) + }); +} diff --git a/src/view/selection/AliExpressCopy.vue b/src/view/selection/AliExpressCopy.vue index 93ae6db..c47409d 100644 --- a/src/view/selection/AliExpressCopy.vue +++ b/src/view/selection/AliExpressCopy.vue @@ -2,10 +2,10 @@
+ slot="title" + title="速卖通采集" + tips="请先在当前浏览器登录“拼多多跨境卖家中心”,期间保持登录状态" + isShowBottomBorder> + :tableData="tableData" + :col-configs="colConfigs" + :total="total" + style="margin-top: 8px;" + :current.sync="search.current" :size.sync="search.size" + @getList="getList">