我正在使用 Froala 编辑器。我想将图像上传到自己的服务器,如文档响应格式中所述{ link: 'path/to/image.jpg' }
,但我的服务器以另一种格式返回响应。
是否可以通过处理某些事件来使用 Froala 的自定义响应格式?
我正在使用 Froala 编辑器。我想将图像上传到自己的服务器,如文档响应格式中所述{ link: 'path/to/image.jpg' }
,但我的服务器以另一种格式返回响应。
是否可以通过处理某些事件来使用 Froala 的自定义响应格式?
通过前端与服务器响应模型无关。它的模型是在后端设计的,如果您需要更改它,您可以解析您获得的 Json 并根据需要更改模型。要完全按照您上面提到的方式获得模型,您应该与您的后端团队交谈。
我正在使用 cloudinary.com 上传和提供图像,我也无法控制响应。我的临时解决方案是像这样(coffeescript)修补 JSON.parse 方法:
var _parseJSON = JSON.parse;
JSON.parse = function(j) {
var response = _parseJSON(j);
response.link = response.secure_url;
return response;
};
我真的希望找到一个更优雅的解决方案!
只要有来自服务器的响应,就会触发image.uploaded事件。您可以使用此事件的响应参数和image.insert 方法在编辑器中添加图像。
此外,在回调结束时返回 false 以防止默认编辑器上传链也很重要。
下面是一个代码片段:
$('.selector')
.froalaEditor()
.on('froalaEditor.image.uploaded', function (e, editor, response) {
// Parse response to get image url.
var img_url = ... ;
// Insert image.
editor.image.insert(img_url, false, null, editor.image.get(), response);
return false;
});
Froala 在管理上传时似乎没有修改服务器响应的机制。有一个合适的 froala 事件froalaEditor.file.uploaded
,但它只能中止上传过程。将来可能会更新以适应此类情况
但是,您想要的绝对是可行的。首先,您需要imageUploadURL
在 froala 配置中添加一个查询参数来支持,例如const froalaConfig = {imageUploadURL: '/yourUploadsEndpoint?fromFroala'}
. 需要此参数来区分 froala 与其他人实际发出的请求。
然后我们将做一个小猴子补丁XMLHttpRequestObject
,froala 内部使用它来发出 http 请求:
const accessor = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'responseText')
Object.defineProperty(XMLHttpRequest.prototype, 'responseText', {
get() {
const responseText = accessor.get.call(this)
// here we can check if response url includes our previously set query param
if (this.responseURL.includes('?fromFroala')) {
// r is our response object
const r = JSON.parse(responseText)
return JSON.stringify({ link: <path to your uploaded image url here> })
}
return responseText
},
configurable: true,
})
这应该可以解决问题,直到 froala 切换到另一个数据获取 API。