近来用户反映希望我们把在线编辑器中的多图片上传功能实现,因为他们在编辑商品描述时经常会有一次上传多张图片的需求,如果要逐张选择的话效率很低,客户的需求就是我们的追求,很快我们就把完善功能排到了日程表中,要求尽快实现。
我们在项目中使用的在线编辑器是Kindeditor4.1.10,它们的多文件上传插件是使用Flash实现的,原本应该就是能使用的,但为什么老是显示上传失败的,百度了一下前人的经验和教训,出现这种情况,有两种可能:1)上传的目标文件夹没有写权限,导致上传的文件无法进行写操作,所以上传失败;2)有做权限验证的系统,因为利用Flash上传时,由于在上传时Flash插件没有把SessionId带过去,引起session丢失导致上传失败。
我们在做单张与多张上传的目标路径是在同一个母文件夹下的,所以不会是第一种情况引起的,那就唯有是第二种情况了,基于这样的判断,那就要在Flash上传的时候手动加上sessionId参数和值,到服务端的时候再接收下来应用到Session中,这样应该就能解决问题了,事实证明,这样的思路是正确的,下面的具体操作的方法。
打开/kindeditor/plugins/multiimage/multiimage.js,找到postParams这个配置项,把原配置postParams : K.undef(self.extraFileUploadParams, {}),改为postParams : $.extend(K.undef(self.extraFileUploadParams, {}), {"__JentianYunSessionID": jt.cookie('__JentianYunSessionID')}),上面的__JentianYunSessionID应该替换成你们的sessionId的name属性,这样,就能在Flash上传文件时把你们的SessionId带到服务端页面了,然后再要处理上传文件的页面的开头加上
$session =toolsTools::allChar('__JentianYunSessionID');
if($session){//重新设置cookie,解决使用Flash上传图片时cookie丢失的问题
session_id($session);
session_start();
}
这样,kindeditor/Flash实现多文件(图片)上传就能成功了