用 QuillJS 图片表达 [413 too large]
Express [413 too large] with QuillJS image
我正在尝试使用 QuillJS 让用户编写富文本,然后将其存储为 JSON 以便稍后显示。单个表单中有 2 个这样的富文本区域,并且可能包含图像。 QuillJS 将图像编码为 base64 字符串,我的 POST 请求通过 Express 得到 413。
我试图通过添加快速 json 参数来更改限制,甚至尝试使用极端数字。
// app.js
//----------------------------------------------------
// Middlewares
//----------------------------------------------------
app.use(express.json({limit: '2000mb'}));
app.use(express.urlencoded({extended: true, limit:'2000mb'}));
即使这样也无济于事,我认为让这些参数具有这样的值是不合逻辑的。
我尝试使用 json 和 urlencoded enctypes。当我尝试 post 和 multipart/form 时,req.body
是空的。
// My html page (pugJS)
form(enctype='application/x-www-form-urlencoded', action='/editor/page',
method='POST', onsubmit='return addContent()')
.form-control
label Content-1
div#toolbar
div#editor
input#content(name='content', type='text', hidden)
在表单提交之前运行的 addContent() 函数只是将 input#content
的值更改为 JSON.stringify(#editor.getContents())
我希望能够在单个数据库行中存储两个 quill 内容,以便稍后显示。
更好的方法是覆盖图像上传功能,然后将图像保存在 Amazon S3 或某些云服务器中。然后将其粘贴到编辑器中作为 <img src="http://uploaded-image-url">
这将解决您的最大内存问题。
我在@argo 提到的几个小时前就解决了我的问题,我就是这样做的。所以我想 post 解决方案的一些细节。我也受到 github 问题的指导,但似乎无法再次找到 link,如果我找到它,我将编辑 post 并添加它。
// Quill - EN content
var quillEn = new Quill('#editor-en', {
modules: {
toolbar: toolbarOptions
},
theme: 'snow'
});
// set custom image handler
quillEn.getModule('toolbar').addHandler('image', () => {
selectLocalImage(quillEn);
});
// create fake input to upload image to quill
function selectLocalImage(editor) {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/png, image/jpeg')
input.click();
// Listen upload local image and save to server
input.onchange = () => {
const file = input.files[0];
saveImageToServer(editor, file);
};
}
// upload image to server
function saveImageToServer(editor, file) {
const fd = new FormData();
fd.append('image', file);
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/page/upload_image', true);
xhr.onload = () => {
if (xhr.status === 200) {
// this is callback data: url
const url = JSON.parse(xhr.responseText).data;
insertToEditor(editor, url);
}
};
xhr.send(fd);
}
// manipulate quill to replace b64 image with uploaded image
function insertToEditor(editor, url) {
// push image url to rich editor.
const range = editor.getSelection();
editor.insertEmbed(range.index, 'image', url.toString());
}
在你 POST 图片的后端,你必须 return json as { data: FullUrlToImg }
with 200 response,如果你想将你的状态更改为 201 或其他否则,不要忘记在 saveImageToServer
函数中更新它。
总而言之,您为您的羽毛笔编辑器设置了自定义图像处理程序,您 post 在用户选择插入后立即将图像发送到服务器,然后用您上传的图像替换 URL在编辑器中。
谢谢。
我正在尝试使用 QuillJS 让用户编写富文本,然后将其存储为 JSON 以便稍后显示。单个表单中有 2 个这样的富文本区域,并且可能包含图像。 QuillJS 将图像编码为 base64 字符串,我的 POST 请求通过 Express 得到 413。
我试图通过添加快速 json 参数来更改限制,甚至尝试使用极端数字。
// app.js
//----------------------------------------------------
// Middlewares
//----------------------------------------------------
app.use(express.json({limit: '2000mb'}));
app.use(express.urlencoded({extended: true, limit:'2000mb'}));
即使这样也无济于事,我认为让这些参数具有这样的值是不合逻辑的。
我尝试使用 json 和 urlencoded enctypes。当我尝试 post 和 multipart/form 时,req.body
是空的。
// My html page (pugJS)
form(enctype='application/x-www-form-urlencoded', action='/editor/page',
method='POST', onsubmit='return addContent()')
.form-control
label Content-1
div#toolbar
div#editor
input#content(name='content', type='text', hidden)
在表单提交之前运行的 addContent() 函数只是将 input#content
的值更改为 JSON.stringify(#editor.getContents())
我希望能够在单个数据库行中存储两个 quill 内容,以便稍后显示。
更好的方法是覆盖图像上传功能,然后将图像保存在 Amazon S3 或某些云服务器中。然后将其粘贴到编辑器中作为 <img src="http://uploaded-image-url">
这将解决您的最大内存问题。
我在@argo 提到的几个小时前就解决了我的问题,我就是这样做的。所以我想 post 解决方案的一些细节。我也受到 github 问题的指导,但似乎无法再次找到 link,如果我找到它,我将编辑 post 并添加它。
// Quill - EN content
var quillEn = new Quill('#editor-en', {
modules: {
toolbar: toolbarOptions
},
theme: 'snow'
});
// set custom image handler
quillEn.getModule('toolbar').addHandler('image', () => {
selectLocalImage(quillEn);
});
// create fake input to upload image to quill
function selectLocalImage(editor) {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/png, image/jpeg')
input.click();
// Listen upload local image and save to server
input.onchange = () => {
const file = input.files[0];
saveImageToServer(editor, file);
};
}
// upload image to server
function saveImageToServer(editor, file) {
const fd = new FormData();
fd.append('image', file);
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/page/upload_image', true);
xhr.onload = () => {
if (xhr.status === 200) {
// this is callback data: url
const url = JSON.parse(xhr.responseText).data;
insertToEditor(editor, url);
}
};
xhr.send(fd);
}
// manipulate quill to replace b64 image with uploaded image
function insertToEditor(editor, url) {
// push image url to rich editor.
const range = editor.getSelection();
editor.insertEmbed(range.index, 'image', url.toString());
}
在你 POST 图片的后端,你必须 return json as { data: FullUrlToImg }
with 200 response,如果你想将你的状态更改为 201 或其他否则,不要忘记在 saveImageToServer
函数中更新它。
总而言之,您为您的羽毛笔编辑器设置了自定义图像处理程序,您 post 在用户选择插入后立即将图像发送到服务器,然后用您上传的图像替换 URL在编辑器中。
谢谢。