图库链接:https://ims-chat.pinduoduo.com/index.html?client=ims
找一个GITHUB得,SM.MS得图库插件。目前一键不能使用得
https://github.com/qcgzxw/SMMS-UPLOADER/tree/master
修改文件为:content.min.js
这样再后台发表文章得时候就能直接一键添加到内容。
因为涉及跨域问题。我架设了代理端。
具体得代码为
- jQuery(document).ready(function($) {
- $('#admin-img-file').change(function() {
- for (var i = 0; i < this.files.length; i++) {
- var f = this.files[i];
- // 第一步:获取签名
- $.ajax({
- url: 'http://你自己得服务器IP:6003/proxy?url=https://mms.pinduoduo.com/plateau/chat/ims/get_upload_sign',
- type: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- data: '{"data":{"cmd":"get_upload_sign"}}',
- success: function(response) {
- response=JSON.parse(response);
- var signature = response.result.data.signature;
- var uploadUrl = response.result.data.url; // 或者 response.result.data.url
- console.log(signature);
- console.log(uploadUrl);
- // 第二步:使用签名上传文件
- uploadFileWithSignature(f, signature, uploadUrl);
- },
- error: function(xhr, status, error) {
- alert('获取签名失败: ' + error);
- }
- });
- }
- });
-
- function uploadFileWithSignature(file, signature, uploadUrl) {
- console.log(file);
- if (file) {
- var reader = new FileReader();
- reader.onload = function(e) {
- // e.target.result 包含了文件的 Base64 编码字符串
- var base64String = e.target.result;
- console.log(base64String); // 在控制台中打印 Base64 编码的字符串
- // 在这里可以将 base64String 发送到服务器或进行其他操作
- // 创建一个包含文件数据和签名的 JSON 对象
- var data = {
- image: base64String,
- upload_sign: signature
- };
- $.ajax({
- url: 'http://你自己得服务器IP:6003/proxy?url='+uploadUrl,
- type: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- data: JSON.stringify(data),
- success: function(res) {
- res=JSON.parse(res);
- $('textarea[name="content"]').insertAtCaret('<img class="aligncenter" src="' + res.url + '" />');
- $("html").find("iframe").contents().find("body").append('<img class="aligncenter" src="' + res.url + '" />');
- },
- error: function(xhr, status, error) {
- alert('图片上传失败: ' + error);
- }
- });
- };
- reader.onerror = function(error) {
- console.error('Error: ', error);
- };
- fileb=reader.readAsDataURL(file); // 读取文件内容并转换为 Base64 编码
- }
- }
-
- $.fn.extend({
- insertAtCaret: function(myValue) {
- var $t = $(this)[0];
- if (document.selection) {
- this.focus();
- sel = document.selection.createRange();
- sel.text = myValue;
- this.focus()
- } else if ($t.selectionStart || $t.selectionStart == "0") {
- var startPos = $t.selectionStart;
- var endPos = $t.selectionEnd;
- var scrollTop = $t.scrollTop;
- $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
- this.focus();
- $t.selectionStart = startPos + myValue.length;
- $t.selectionEnd = startPos + myValue.length;
- $t.scrollTop = scrollTop
- } else {
- this.value += myValue;
- this.focus()
- }
- }
- });
- });
代理段代码为
- const express = require('express');
- const request = require('request');
- const app = express();
- // 允许所有跨域请求
- app.use((req, res, next) => {
- res.header('Access-Control-Allow-Origin', '*'); // 允许所有域的请求,出于安全考虑,生产环境中应指定具体域名
- res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
- res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept, X-Requested-With, Origin, Referer');
- if (req.method === 'OPTIONS') {
- res.sendStatus(204); // 预检请求直接返回204
- } else {
- next();
- }
- });
- // 解析 JSON 格式的请求体
- app.use(express.json());
- // 解析 URL 编码的表单数据
- app.use(express.urlencoded({ extended: true }));
- app.use('/proxy', (req, res) => {
- const targetUrl = req.query.url;
- console.log(targetUrl);
- if (!targetUrl) {
- return res.status(400).send('Missing URL parameter');
- }
- const postData = req.body;
- //console.log(req.body);
- const headers = {
-
- 'Content-Type': 'application/json',
-
- 'Cookie': 'imsChatKey=c05410f991e41d77dc3440865cb3fe581dc2975e; api_uid=CkNFrWcc+9mFdgCN5P99Ag=='
- };
- // 发起请求到目标服务器,并转发请求体中的数据
- //console.log(JSON.stringify(postData));
- request({
- method: 'POST',
- url: targetUrl,
- headers: headers,
- body: JSON.stringify(postData) // 将 req.body 转换为 JSON 字符串
- }, (error, response, body) => {
- if (error) {
- return res.status(500).send('Error proxying request');
- }
- res.status(response.statusCode).send(body);
保存文件为X.JS,之后NODE运行即可
node X.JS
结语
PDD上传得时候好像需要验证COOKIE,目前我是固定定死不知道会不会有问题。不带得话拒绝请求
其他没限制。PDD不倒,图库应该就一直有效。嫖就是了