ueditor+requirejs+springMVC+七牛(富文本编辑器图片上传到指定服务器)

为了能较少引用js,提高页面加载速度,requirejs逐渐流行起来。本文是requirejs和当下主流插件结合的使用总结。

其中:富文本编辑器是百度的UEditor,MVC框架是java开发最流行的SpringMVC,服务器是小用户使用较多的七牛云(跟阿里云等没法比,但是很经济实惠才是硬道理大笑),不多说,写下自己能使用的解决方案,以备将来之用,也给别人送支玫瑰。


一、requirejs配置文件引入ueditor:

// 配置依赖
require.config({
    baseUrl: '/lib',
    paths: {
        'ueditor': 'ueditor/ueditor.all.min',
        'ueditor.config': 'ueditor/ueditor.config',
        'ZeroClipboard' : 'ueditor/third-party/zeroclipboard/ZeroClipboard'
    },
    shim: {
        'ueditor': {  deps: ['ueditor.config'] }
    }
});
// 主函数
require([ 'ZeroClipboard',  'ueditor'], function (ZeroClipboard) {
     // 初始化ZeroClipboard,此处一定要有,不然会报错
     window['ZeroClipboard'] = ZeroClipboard;
	……
});

二、ueditor.config.js配置


其中的window.UEDITOR_HOME_URL必须有,配置为相对路径即可。

imageUrl配置为自己的后台处理接口。

三、后台接口代码:

    private final static String[] imageAllowFiles = { ".jpg",".jpeg",".png" };

   /**
     * UEditor上传配置
     *
     * @return
     */
    @RequestMapping("/ueditor/config")
    @ResponseBody
    public Map<String, Object> upload(String action,
                                      @RequestParam(required = false, value = "image") CommonsMultipartFile image) throws IOException {
        long imageMaxSize = 2048000L; //上传大小限制,单位B
        Map<String, Object> resultMap = new HashMap<>();

        // ueditor请求后台配置时的相应函数
        if (StringUtils.isNotBlank(action) && action.equals("config")) {

            resultMap.put("imageActionName", "uploadimage"); // 上传图片的action

            // 这个配置是ueditor上传文件的name属性
            resultMap.put("imageFieldName", "image");
            resultMap.put("imageMaxSize", imageMaxSize);
            resultMap.put("imageAllowFiles", imageAllowFiles);//必须指定,不然多图片上传时,会提示”文件格式不允许”
            resultMap.put("imageUrlPrefix", "");
            resultMap.put("state", "SUCCESS");
        } else {
            if (null == image) {
                resultMap.put("state", "上传失败,上传的图片为空");
            } else {
                String imgName = image.getOriginalFilename();
                String type = imgName.lastIndexOf(".") == -1 ? "" : imgName.substring(imgName.lastIndexOf("."));
                resultMap.put("original", image.getOriginalFilename());
                resultMap.put("type", type);
                if (!checkImageType(imgName)) {
                    resultMap.put("state", "上传失败,目前支持" + Arrays.toString(imageAllowFiles) + "类型的图片");
                } else {
                    long size = image.getSize();
                    resultMap.put("size", size);
                    if (size > imageMaxSize) {
                        resultMap.put("state", "上传失败,文件大小不能超过[" + (imageMaxSize / 1024 / 1024) + "]M");
                    } else {
                        resultMap.putAll(qiniuUtil.upLoadByte(image.getBytes(),type.toLowerCase()));
                        resultMap.put("state", "SUCCESS");
                    }
                }
            }
        }
        return resultMap;
    }

    /**
     * 判断文件名称是否是允许的文件类型
     *
     * @param fileName
     * @return
     */
    private boolean checkImageType(String fileName) {
        if (StringUtils.isBlank(fileName)) {
            return false;
        }
        int i = fileName.lastIndexOf(".");
        if (i == -1) {
            return false;
        }
        String type = fileName.substring(i);

        for (String ext : imageAllowFiles) {
            if (ext.equalsIgnoreCase(type)) {
                return true;
            }
        }
        return false;
    }

四、Ueditor选择图片弹出选择框过慢

这个是因为没有指定可接受图片类型,将所引用的ueditor.all.js(或ueditor.all.min.js,看引用的是哪一个)中的接受类型由”image/*”改为自己需要的类型,以下是我修改后的。


五、备注

1:代码中涉及的util需要自己定义;

2:本文是将图片直接上传到七牛云,所以需要自己拼接返回前端的参数。

3:前端需要参数如下:

"state"=> "", //上传状态,上传成功时必须返回"SUCCESS"

"url"=> "", //返回的地址

"title"=> "", //新文件名

"original"=> "", //原始文件名

"type"=> "" //文件类型

"size"=> "", //文件大小

4:七牛上传代码如下,其中返回了前端需要的url和title。

	public Map<String,Object> upLoadByte(byte[] data, String type){
		Map<String, Object> res = new HashMap<>();
		String key = getKey()+type;
		Configuration cfg = new Configuration(Zone.autoZone());
		UploadManager uploadManager=new UploadManager(cfg);
		try {
			Response response= uploadManager.put(data, key, getUpToken());
			if (response.isOK()){
				res.put("url",domain+"/"+key);
				res.put("title",key);
			}
		} catch (QiniuException e) {
			Response r = e.response;
			System.err.println(r.toString());
		}
		return res;
	}

5:切记(提醒自己和七牛使用者)

七牛7.2.2以上java-sdk版本才有

Configurationcfg = new Configuration(Zone.autoZone());

         UploadManageruploadManager=new UploadManager(cfg);

低版本没有Configuration,不可用。如果直接使用无参构造定义UploadManager uploadManager=new UploadManager();会出现初始化错误。

 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值