zoukankan      html  css  js  c++  java
  • 成长就是不断踩坑的过程

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

    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
  • 相关阅读:
    android源码在线查看
    关于codereview工具与建议
    <转>如何进行code review
    [转] Android实时抓包分析 : 善用adb调试桥
    Swift:UIKit中Demo(一)
    Objective-C学习笔记(十)——循环语句for和do-while的使用
    一些牛人的IOS博客,mark下慢慢学习
    Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)
    Web前端之基础知识
    通过金矿模型介绍动态规划
  • 原文地址:https://www.cnblogs.com/zhaiyt/p/9957836.html
Copyright © 2011-2022 走看看