关于web端tinymce编辑器的插件多图上传怎么处理?

我这边web端用了一个编辑器 tinymce, 因为有多图上传的需求,下了关于它的一个插件 axupimgs.zip
发现这个插件虽然是多图上传, 但是实际上是将多个图片分开,每次调用一次接口进行上传,而不是调用一次接口,将整体图片上传
因为我这边因为业务需要对接口调用频率进行限制
本来上传图片的接口是限制每天只能调用10次,每次上传的图片最大30张,
但是这个上传图片的插件一张图片就调用一次接口, 这样请求就太多了~~
求问有没有处理的好办法~~


回答:

看文档可以提供一个 images_upload_handler 参数,用来处理选择图片后处理上传的,而这里就传入了图片的 blob 对象,同时,这个方法要求返回一个 Promise,resolve 时,把上传成功的地址传进去就行。

那就对自己实现以下,在外部提供 files 数组用来存选择的文件,tasks 用来存 Promise 的 resolve 方法,实际上这里更像是 Deferred 了。

然后单独提供一个方法,doUpload 来上传文件,利用 FormData 上传文件,成功后,再便利调用 tasks 数组下的 resolve 方法完成上传就好。

至于这个 doUpload ,只是一个假设函数,你也可以选择再创建一个按钮来触发它。

整个过程中,重要的就是批量上传到后端的响应要和你前端的存的 resolve 对应起来,这里比较简单就是用的下标。

  • Handling image uploads | TinyMCE Documentation
const files = [];

const tasks = [];

function uploadImages (blob, progress) {

// 把选择的文件放到待上传的列表

files.push(blob)

return new Promise(function (resolve) {

// 把这个 Promise 的 resolve 也放上去。

tasks.push(resolve)

})

}

function doUpload () {

const _files = files.slice();

const _tasks = tasks.slice();

files.length = 0

tasks.length = 0

console.log(_files);

const formData = new FormData;

_files.forEach((file, index) => formData.append(`files[${index}]`, file))

fetch('/image', {

method: 'post',

body: formData

}).then(resp => resp.json()).then(result => {

// 假设 result 里面有个 uploaded 数组,他返回的顺序,跟你发送的 files 的下标保持一致的。

_tasks.forEach((task, index) => {

task(result.uploaded[index])

})

})

}

// 测试

uploadImages('1', 0).then(console.log)

uploadImages('2', 0).then(console.log)

uploadImages('3', 0).then(console.log)

doUpload()

以上是 关于web端tinymce编辑器的插件多图上传怎么处理? 的全部内容, 来源链接: utcz.com/p/933432.html

回到顶部