若依系统富文本框上传图片报错!

编程入门 行业动态 更新时间:2024-10-28 16:24:59

若依系统富文本框上传图片<a href=https://www.elefans.com/category/jswz/34/1771188.html style=报错!"/>

若依系统富文本框上传图片报错!

 报错如下:

 原因:如图,富文本路径中存在 / 字符,导致上传出错。

 解决方案:将富文本框内容在前端进行加密,后端再解密。

前端:

安装 crypto-js 插件

npm install crypto-js

创建工具类 :在 src 目录下的  utils  中创建asc.js

import CryptoJS from 'crypto-js'// 需要和后端一致
const KEY = CryptoJS.enc.Utf8.parse('wenhePiCloudSecre');
const IV = CryptoJS.enc.Utf8.parse('wenhePiCloudSecre');export default {/*** 加密* @param {*} word* @param {*} keyStr* @param {*} ivStr*/encrypt (word, keyStr, ivStr) {let key = KEY;let iv = IV;if (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);},/*** 解密* @param {*} word* @param {*} keyStr* @param {*} ivStr*/decrypt (word, keyStr, ivStr) {let key = KEY;let iv = IV;if (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let base64 = CryptoJS.enc.Base64.parse(word);let src = CryptoJS.enc.Base64.stringify(base64);let decrypt = CryptoJS.AES.decrypt(src, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);return decryptedStr.toString();}
}

使用:引入函数,使用函数

asc.encrypt(data)

后端:

 maven中引入包:

            <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.60/version></dependency>

创建工具类:

package com.ruoyimon.utils;import org.apachemons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;/*** @author root*/
public class SecretUtil {/**** key和iv值需要和前端一致*/public static final String KEY = "wenhePiCloudSecre";public static final String IV = "wenhePiCloudSecre";/*** 加密方法** @param data 要加密的数据* @param key  加密key* @param iv   加密iv* @return 加密的结果*/public static String encrypt(String data, String key, String iv) {try {//"算法/模式/补码方式"NoPadding PkcsPaddingCipher cipher = Cipher.getInstance("AES/CBC/NoPadding");int blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密方法** @param data 要解密的数据* @param key  解密key* @param iv   解密iv* @return 解密的结果*/public static String desEncrypt(String data, String key, String iv) {try {byte[] encrypted1 = new Base64().decode(data);Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);byte[] original = cipher.doFinal(encrypted1);return new String(original).trim();} catch (Exception e) {e.printStackTrace();return null;}}
}

使用:

 object.setDocContent(SecretUtil.desEncrypt(object.getDocContent(),SecretUtil.KEY,SecretUtil.IV));

搞定~

更多推荐

若依系统富文本框上传图片报错!

本文发布于:2023-11-15 00:54:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1590798.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:报错   上传图片   文本框   系统

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!