引言:
富文本編輯器傳圖片會解碼成64位,非常長導致數據庫會報錯 第一種方法:將數據庫類型改成 mediumtext
第二種辦法:本文中的方法
說明,本周文所用語法糖為Vue3 setup語法,即<script setup>
思路
攔截富文本編輯器上傳圖片功能,即點擊按鈕將事件綁定到input
或upload
的上傳圖片上 將圖片上傳到自己服務器,并返回url地址 將url地址存到數據庫,顯示的時候直接映射
第一步:安裝 quill-image-extend-module
npm install quill- image- extend- module -- save- dev
第二部:全局注冊 main.js
import { QuillEditor, Quill } from '@vueup/vue-quill'
import '@vueup/ vue- quill/ dist/ vue- quill. snow. css';
import { container, QuillWatch, ImageExtend} from "quill-image-extend-module" ;
Quill. register ( 'modules/ImageExtend' , ImageExtend) const app = createApp ( App)
app. component ( 'QuillEditor' , QuillEditor)
第三步:組件引用 (引入我的部分代碼,不相關部分已去除)
< template> < QuillEditorv- model: content= "form.productParaImgs" contentType= "html" theme= "snow" ref= "productParaImgsForm" : options= "productParaImgsEditorOption" @change= "onEditorChange($event)" style= "height:200px" > < / QuillEditor> < inputtype= "file" accept= ".png,.jpg,.jpeg" @change= "productParaImgsChange" id= "productParaImgsUpload" style= "display: none;border: 4px solid red" / >
< / template> < script setup>
import { container, ImageExtend, QuillWatch} from 'quill-image-extend-module'
const productParaImgsForm = ref ( null) ;
const productParaImgsEditorOption = ref ( { placeholder: "請輸入" , theme: "snow" , modules: { ImageExtend: { name: 'img' , size: 3 , action: '' , response: ( res) = > { } , headers: ( xhr) = > { xhr. setRequestHeader ( 'token' , window. sessionStorage. getItem ( 'token' ) ) } , } , toolbar: { container: container, handlers: { 'image' : function ( value) { if ( value) { document. querySelector ( "#productParaImgsUpload" ) . click ( ) ; } else { this. quill. format ( "image" , false) ; } } } } }
} )
const productParaImgsChange = async ( e) = > {
let formData = new FormData ( ) ; let file = e. target. files[ 0 ] ; formData. append ( 'file' , file) ; let result = await requestUitl. post ( "/sys/product/uploadImage" , formData) ; if ( result. data. code == 647 ) { let quill = productParaImgsForm. value. getQuill ( ) let length = quill. getSelection ( ) . index; quill. insertEmbed ( length, "image" , getServerUrl ( ) + result. data. src) ; quill. setSelection ( length + 1 ) ; }
}
< / script>
后端返回類型參考
Map< String, Object> dataMap = new HashMap< > ( ) ;
dataMap. put ( "title" , newFileName) ;
dataMap. put ( "src" , "image/product/" + newFileName) ;
請求封裝參考
export function post ( url, params = { } ) { return new Promise ( ( resolve, reject) = > { httpService ( { url: url, method: 'post' , data: params} ) . then ( response = > { resolve ( response) ; } ) . catch ( error = > { reject ( error) ; } ) ; } ) ;
}
export default { post, getServerUrl
}