package jnpf.base.controller; import com.alibaba.fastjson.JSONObject; import feign.Response; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.model.ocr.OcrForm; import jnpf.base.model.ocr.OcrModel; import jnpf.config.ConfigValueUtil; import jnpf.constant.FileTypeConstant; import jnpf.constant.MsgCode; import jnpf.exception.DataException; import jnpf.file.FileUploadApi; import jnpf.model.upload.UploadFileModel; import jnpf.util.StringUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.InputStream; import java.util.ArrayList; import java.util.Base64; import java.util.List; /** * ocr解析 * * @author JNPF开发平台组 * @version v6.1.0 * @copyright 引迈信息技术有限公司 * @date 2025/7/29 16:58:47 */ @Slf4j @Tag(name = "ocr解析", description = "ocr") @RestController @RequiredArgsConstructor @RequestMapping("/ocr") public class OcrController { private final ConfigValueUtil configValueUtil; private final FileUploadApi fileUploadApi; @Operation(summary = "ocr解析") @PostMapping public ActionResult form(@RequestBody OcrForm form) { String url = form.getUrl(); String substring = url.substring(url.lastIndexOf("/") + 1); //下载到本地 Response response = fileUploadApi.downFile(new UploadFileModel(FileTypeConstant.ANNEXPIC, substring)); try (InputStream ins = response.body().asInputStream()) { byte[] byteArray = IOUtils.toByteArray(ins); String str = Base64.getEncoder().encodeToString(byteArray); JSONObject body = new JSONObject(); List list = new ArrayList<>(); list.add(str); body.put("images", list); String ocrUrl = configValueUtil.getOcrUrl(); if (StringUtil.isEmpty(ocrUrl)) { return ActionResult.fail(MsgCode.SYS183.get()); } if (ocrUrl.endsWith("/")) { ocrUrl = ocrUrl.substring(0, ocrUrl.length() - 1); } OcrModel ocrModel = OcrModel.get(form.getType()); ocrModel.extract(ocrUrl, body); return ActionResult.success(ocrModel); } catch (DataException e) { log.error(e.getMessage(), e); return ActionResult.fail(e.getMessage()); } catch (Exception e) { log.error(e.getMessage(), e); } return ActionResult.fail(MsgCode.FA104.get()); } }