在学习过程中突然发现我以前用的文件上传真的好傻。以前的博客记录中还沾沾自喜文件上传模板可以套用,不接收新事物,却发现原来Springboot的文件上传如此简单。
首先,文件上传的三种方式,普通文件上传,多文件上传,base64码上传,但是百度得知base64码的文件比原文件耗用的资源多意见,这里直接采用普通文件上传。
前提:百度ocr需要自行免费申请,在百度云里面自己申请,获得APP-ID,key和secret的一些必要参数。
项目环境:springboot2.0,如果首次使用springboot,请参考以前博客。下面介绍详细步骤。
- 需要在pom.xml中添加:(添加使用百度ocr接口的环境)
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.4.1</version>
</dependency>
- 在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
- 编写后台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.进行测试。
随意拍一张上一篇
看看控制台的打印:
程序已经完成,对于返回的数据json格式的数组,springboot既然支持json格式返回出去,哪就有相关的jar包可以直接用。如果需要细化,提取json中的数据,那么就研究下封装好json对象的基本语法提取,这里就不做过多详述。