在学习过程中突然发现我以前用的文件上传真的好傻。以前的博客记录中还沾沾自喜文件上传模板可以套用,不接收新事物,却发现原来Springboot的文件上传如此简单。

首先,文件上传的三种方式,普通文件上传,多文件上传,base64码上传,但是百度得知base64码的文件比原文件耗用的资源多意见,这里直接采用普通文件上传。

前提:百度ocr需要自行免费申请,在百度云里面自己申请,获得APP-ID,key和secret的一些必要参数。

项目环境:springboot2.0,如果首次使用springboot,请参考以前博客。下面介绍详细步骤。

  1. 需要在pom.xml中添加:(添加使用百度ocr接口的环境)
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.4.1</version>
        </dependency>
  1. 在application.properties.里面或者yml里面添加关于文件上传的支持:
spring.servlet.multipart.enabled=true
# 上传文件的临时目录 (一般情况下不用特意修改)
#spring.servlet.multipart.location=
# 上传文件最大为 1M (默认值 1M 根据自身业务自行控制即可)
spring.servlet.multipart.max-file-size=104857600
# 上传请求最大为 10M(默认值10M 根据自身业务自行控制即可)
spring.servlet.multipart.max-request-size=104857600
# 文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,(默认值0 一般情况下不用特意修改)
spring.servlet.multipart.file-size-threshold=0
# 判断是否要延迟解析文件(相当于懒加载,一般情况下不用特意修改)
spring.servlet.multipart.resolve-lazily=false

  1. 编写后台controller:OCRcontroller:
import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Controller
public class OCRController {
   //接口申请免费,请自行申请使用,如果学习使用可以用下
    public static final String APP_ID = "15742445";
    public static final String API_KEY = "LXrztEOzQxfef66DLIDQYpIG";
    public static final String SECRET_KEY = "gbDodnochc8jYjlAHADDgyyas9mrlmkF";

    @ResponseBody
    @PostMapping("ocrimg")
    public String ocrimg(MultipartFile file) throws IOException {

        HashMap<String, String> options = new HashMap<String, String>();
        options.put("language_type", "CHN_ENG");
        //高精度识别一些参数在api文档可以参考
//        options.put("detect_direction", "true");
//        options.put("detect_language", "true");
//        options.put("probability", "true");
        AipOcr client=new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        byte [] bite=file.getBytes();
        System.out.println(file.getName());
        System.out.println(file.getOriginalFilename()+" "+file.getResource());
        JSONObject jsonObject=client.basicGeneral(bite,options);
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }
}

你会发现文件收传如此简单,比用jar包,或者servlet3.0的方法都要简洁很多,查看代码是他把东西都优化封装好了,开箱即用。

4.编写前端代码:(static下index,html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/ocrimg" enctype="multipart/form-data" method="post">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>
</body>
</html>

5.进行测试。
随意拍一张上一篇
Springboot文件上传+百度ocr文字识别提取
Springboot文件上传+百度ocr文字识别提取
Springboot文件上传+百度ocr文字识别提取

看看控制台的打印:
Springboot文件上传+百度ocr文字识别提取
程序已经完成,对于返回的数据json格式的数组,springboot既然支持json格式返回出去,哪就有相关的jar包可以直接用。如果需要细化,提取json中的数据,那么就研究下封装好json对象的基本语法提取,这里就不做过多详述。

相关文章:

  • 2021-12-30
  • 2021-11-05
  • 2021-11-18
  • 2022-12-23
  • 2021-11-26
  • 2021-12-30
  • 2021-12-05
猜你喜欢
  • 2021-11-17
  • 2021-05-08
  • 2021-12-05
  • 2021-12-28
  • 2021-12-30
相关资源
相似解决方案