Quill编辑器+VueJS2图片上传:Base64图片转URL
Quill editor + VueJS2 image upload: Base64 image to URL
从这里使用编辑器:https://github.com/surmon-china/vue-quill-editor
我想将图像从 Quill 编辑器保存到 MySQL 数据库,但是 base64 格式的大图像太长而无法插入。
我尝试编写自定义图像处理程序,以便它自动将图像上传到服务器和服务器 returns 图像 URL 但现在我卡住了。
这是我现在的 HTML:
<quill-editor v-model="content"
:options="editorOption"
@onEditorBlur($event)"
@onEditorFocus($event)"
@onEditorReady($event)"
@onEditorChange($event)">
</quill-editor>
像这样向编辑器添加图像处理程序:
onEditorReady(editor) {
editor.getModule('toolbar').addHandler('image', this.imageHandler);
console.log('editor ready!', editor);
},
还有我自己的处理程序:
imageHandler(image, callback){
console.log(image); // Always true
console.log(callback); // Always undefined
// Should get image in here somehow..
var sendData = {
image: 'SomethingShouldBeInHere',
};
// Send image to server,
// Server will return link to image
axios.put('/testImageUpload', sendData)
.then(function(cbData) {
// In here should add image tag to editor somehow..
})
.catch(function (error) {
console.log(error);
});
},
我试过这个:Add support for custom image handler
但它不起作用,因为图像始终为真且回调未定义。
也试过这个:Quill imageHandler
Demo
它首先有同样的问题 link。
目前服务器被硬编码为 return“http://localhost/images/php.jpg”
如果可能我不会使用任何库(jQuery、dropzone 等)
我想我也许可以检查是否在 onEditorChange() 中插入了图像,然后向服务器发送请求,得到 URL,在编辑器中搜索这个 base64 并将其替换为 URL,但是好像不太对。
像这样在您的选项中设置处理程序
editorOption: {
modules: {
toolbar: {
container: [['image'], ...],
handlers: {
'image': function(){
document.getElementById('getFile').click()
}
}
}
}
}
methods: {
uploadFunction(e){
//you can get images data in e.target.files
//an single example for using formData to post to server
var form = new FormData()
form.append('file[]', e.target.files[0])
//do your post
}
}
<template>
<quill-editor v-model="content"
:options="editorOption"
@change="oneEditorChange($event)">
</quill-editor>
<input type="file" id="getFile" @change="uploadFunction($event)" />
</template>
这是我的源代码....
//Template
<input type="file" @change="uploadFunction" id="file" hidden>
<quill-editor
v-model="model"
:options="editorOption"
ref="quillEdit">
</quill-editor>
和脚本
//script
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import Quill from "quill";
import { quillEditor } from "vue-quill-editor";
import ImageResize from "quill-image-resize-module";
import axios from '~/plugins/axios'
export default {
data() {
model: '',
selectedFile : '',
editorOption: {
// some quill options
modules: {
toolbar: {
container: [["bold", "image"]],
handlers: {
image: function() {
document.getElementById('file').click()
}
}
},
imageResize: {
modules: ["Resize", "DisplaySize", "Toolbar"]
}
}
},
},
methods: {
uploadFunction(e){
this.selectedFile = e.target.files[0];
var form = new FormData();
form.append("file", this.selectedFile);
form.append("name", this.selectedFile.name);
//upload image to server
axios.post('media-save', form,{
'headers': {
'Content-Type': "multipart/form-data"
}
})
.then(r => {
console.log('success')
//this code to set your position cursor
const range = this.$refs.quillEdit.quill.getSelection()
//this code to set image on your server to quill editor
this.$refs.quillEdit.quill.insertEmbed(range.index , 'image', `http://your.api/${r}`)
})
.catch(e => {
console.log('error')
}
}
}
从这里使用编辑器:https://github.com/surmon-china/vue-quill-editor
我想将图像从 Quill 编辑器保存到 MySQL 数据库,但是 base64 格式的大图像太长而无法插入。
我尝试编写自定义图像处理程序,以便它自动将图像上传到服务器和服务器 returns 图像 URL 但现在我卡住了。
这是我现在的 HTML:
<quill-editor v-model="content"
:options="editorOption"
@onEditorBlur($event)"
@onEditorFocus($event)"
@onEditorReady($event)"
@onEditorChange($event)">
</quill-editor>
像这样向编辑器添加图像处理程序:
onEditorReady(editor) {
editor.getModule('toolbar').addHandler('image', this.imageHandler);
console.log('editor ready!', editor);
},
还有我自己的处理程序:
imageHandler(image, callback){
console.log(image); // Always true
console.log(callback); // Always undefined
// Should get image in here somehow..
var sendData = {
image: 'SomethingShouldBeInHere',
};
// Send image to server,
// Server will return link to image
axios.put('/testImageUpload', sendData)
.then(function(cbData) {
// In here should add image tag to editor somehow..
})
.catch(function (error) {
console.log(error);
});
},
我试过这个:Add support for custom image handler 但它不起作用,因为图像始终为真且回调未定义。
也试过这个:Quill imageHandler
Demo
它首先有同样的问题 link。
目前服务器被硬编码为 return“http://localhost/images/php.jpg”
如果可能我不会使用任何库(jQuery、dropzone 等)
我想我也许可以检查是否在 onEditorChange() 中插入了图像,然后向服务器发送请求,得到 URL,在编辑器中搜索这个 base64 并将其替换为 URL,但是好像不太对。
像这样在您的选项中设置处理程序
editorOption: {
modules: {
toolbar: {
container: [['image'], ...],
handlers: {
'image': function(){
document.getElementById('getFile').click()
}
}
}
}
}
methods: {
uploadFunction(e){
//you can get images data in e.target.files
//an single example for using formData to post to server
var form = new FormData()
form.append('file[]', e.target.files[0])
//do your post
}
}
<template>
<quill-editor v-model="content"
:options="editorOption"
@change="oneEditorChange($event)">
</quill-editor>
<input type="file" id="getFile" @change="uploadFunction($event)" />
</template>
这是我的源代码....
//Template
<input type="file" @change="uploadFunction" id="file" hidden>
<quill-editor
v-model="model"
:options="editorOption"
ref="quillEdit">
</quill-editor>
和脚本
//script
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import Quill from "quill";
import { quillEditor } from "vue-quill-editor";
import ImageResize from "quill-image-resize-module";
import axios from '~/plugins/axios'
export default {
data() {
model: '',
selectedFile : '',
editorOption: {
// some quill options
modules: {
toolbar: {
container: [["bold", "image"]],
handlers: {
image: function() {
document.getElementById('file').click()
}
}
},
imageResize: {
modules: ["Resize", "DisplaySize", "Toolbar"]
}
}
},
},
methods: {
uploadFunction(e){
this.selectedFile = e.target.files[0];
var form = new FormData();
form.append("file", this.selectedFile);
form.append("name", this.selectedFile.name);
//upload image to server
axios.post('media-save', form,{
'headers': {
'Content-Type': "multipart/form-data"
}
})
.then(r => {
console.log('success')
//this code to set your position cursor
const range = this.$refs.quillEdit.quill.getSelection()
//this code to set image on your server to quill editor
this.$refs.quillEdit.quill.insertEmbed(range.index , 'image', `http://your.api/${r}`)
})
.catch(e => {
console.log('error')
}
}
}