成长就是不断踩坑的过程

图文识别第一版做出来的时候还是有点小成就的,毕竟是自己一手搞出来的,从代码编写到打包部署,虽然处处坑很多,但也是收获颇多。

webOcr 这个项目使用Spring-Boot 搭建,用户使用页面上的上传按钮将图片上传至服务器,后台调用百度云的文字识别接口,将识别出来的数据返回给前台。该项目存在以下不足:

  1.文件上传使用form表单提供,这样就要求用户必须上传图片文件,很不方便,比如用户需要识别某个页面上图片中的文字,他不想将图片截图保存,他就想将图片截图然后粘贴去识别,以前的是不支持该功能呢

  2.后台返回的数据其实是整个页面重新刷新了,因为表单提交不是局部刷新

  3.识别出来的文字虽然有展示可复制,但是无法在页面进行修改

升级版的图文识别由于时间紧,所以无论是页面还是其他地方较上一版还是没有较大的变化,仅解决一上的几个问题。

  1.页面支持粘贴图片

  2.图片粘贴后页面自动预览加载,并ajax调用后台接口上传文件

  3.页面局部刷新,回传的数据显示在编辑框中,数据可以编辑

 

下面总结下本次升级所遇到的问题:

1.ajax上传文件坑

  网上给的资料基本上都会存在input  file 存在。。。但是我这个是不需要文件,我仅需要将图片文件上传

document.addEventListener('paste', function (event) {
    console.log(event);
    var isChrome = false;
    if (event.clipboardData || event.originalEvent) {
        //某些chrome版本使用的是event.originalEvent
        var clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
        if(clipboardData.items){
            // for chrome
            var  items = clipboardData.items,
                len = items.length,
                blob = null;
            isChrome = true;
            for (var i = 0; i < len; i++) {
                console.log(items[i]);
                if (items[i].type.indexOf("image") !== -1) {
                    blob = items[i].getAsFile();
                }
            }
            if(blob!==null){
                var blobUrl=URL.createObjectURL(blob);
                //blob对象显示
                document.getElementById("imgNode").src=blobUrl;
                var reader = new FileReader();
                //base64码显示
                 reader.onload = function (event) {
                     // event.target.result 即为图片的Base64编码字符串
                     var base64_str = event.target.result;
                     var formData = new FormData();
                     formData.append("file",blob);
                     $.ajax({
                         type: "POST",
                         url: "/uploadPic",
                         data: formData,
                         processData:false,
                         contentType: false,
                         success: function(data){
                            $("#returnText").val(data.value);
                         }
                     });
                 }
                reader.readAsDataURL(blob);
            }
        }
    }
});

后台

@RequestMapping(value = "/uploadPic")
    public Map<String,String> uploadPic(@RequestParam("file") MultipartFile file){
        HashMap<String,String> resultMap = new HashMap<>();
        try {
            if (!file.isEmpty()) {
                String fileName = file.getOriginalFilename();
                String path = "src/main/resources/static/images/";
                try {

                    uploadFile(file.getBytes(), path, fileName);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                String value = getString(path+fileName);
                resultMap.put("value",value);
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("value","请截取有效信息");
        }
        return resultMap;
    }

2.后台接收文件的Controller 需要使用RestController

3.....未完

 

代码路径:

https://git.lug.ustc.edu.cn/zhaiyt/screenshot.git
posted @ 2018-11-14 14:35  宅小涛  阅读(321)  评论(0编辑  收藏  举报