ueditor上传远程图片catchimage,也就是复制了一个网络图片,然后粘贴到ueditor工作区后形成的一个上传动作。那么如果页面和接口都在同一个域名下面,那么上传也就简单多了,使用默认上传动作就可以。
如果接口和uediotr页面不在同一个域名下面,就涉及到了一个跨域的动作,因为ueditor的单图上传使用的是表单加iframe回调的这么一个方式,所以ueditor没有提供解决方法,也就是说让我们使用多图的post上传方式来代替单图上传。
多图上传使用的是post请求上传的方式,所以我们在服务器接口部分设置允许跨域就和同域名下的效果一样。
那么上传远程图片,也就是抓取远程图片的时候,使用的上传方式就是jsonp的方式上传,虽然返回的数据都是一样的,但是在返回的结构上要支持jsonp的格式,显然也是一个get请求。
下面是使用koa来接收ueditor抓取远程图片的接口。
// action是用来判断ueditor上传的动作,这里默认是catchimage let {action, callback} = ctx.request.query // get请求的参数 let query = ctx.request.query // 远程图片列表,一个图片默认是一个字符串,这里需要处理一下 let imgUrlList = query['source[]'] let newImageUrlList = [] newImageUrlList = newImageUrlList.concat(imgUrlList) let list = [] for (let i = 0; i < newImageUrlList.length; i++) { let imgUrl = newImageUrlList[i] // 这里的downloadFile和writeUpload表示先下载,再上传到我们的存储的这么一个动作 let fileInfo = await downloadFile(imgUrl) let newFilename = await writeUpload(fileInfo.path, fileInfo.extname) // ueditor处理catchimage的返回结果 list.push({ url: `${newFilename}`, source: imgUrl, state: 'SUCCESS' }) } let result = JSON.stringify({ "state": "SUCCESS", "list": list }) // 返回支持jsonp格式 callback('返回的字符串') ctx.body = `${callback}(${result})`