通过API接口实现图片上传

需求

近期在接口功能实现要求,实现一个API图片上传,补充商户开户后补充图片信息,用于管理人员审核.

业务要求

  1. 图片有多条,法人信息,授权信息,等 有必填图片,有非必填图片,文件大小限制为2MB.
  2. 必填的图片未上传,则本次均不录入数据库.
  3. 图片要求在一次确认后,审核人员才能显示.
  4. 需要进行相关得记录,用于后续查看.

详细设计

为了满足以上实现,有两种实现方式

  1. 单个批量接口 所有的文件通过一个接口批量上传.
  2. 文件单条上传+确认上传.

文件大小在2MB,如果批量上传,10个文件就要20MB,耗时很长,而且会占用带宽,批量接口实现起来比较复杂,评估后,决定使用单条上传+确认上传两步的方式.

流程图

附件上传:

附件确认:

风险点和优化事项

  1. 重复多次上传进行限制.
  2. 针对重复图片,同批次进行MD5判断,如果已存在则不需要传入到内部的文件服务.

数据库表设计


​ MERCHANT_FILE_UPLOAD_BATCH 文件批次上传表

-- auto-generated definition
create table MERCHANT_FILE_UPLOAD_BATCH
(PKID         NUMBER not nullconstraint MERCHANT_FILE_UPLOAD_BATCH_PKprimary key,OID_TRADERNO VARCHAR2(32),BATCH_ID     VARCHAR2(32),BATCH_STATUS VARCHAR2(32),CREATE_TIME  TIMESTAMP(6),UPDATE_TIME  TIMESTAMP(6),CONFIRM_TIME TIMESTAMP(6)
)
/comment on column MERCHANT_FILE_UPLOAD_BATCH.OID_TRADERNO is '商户号'
/comment on column MERCHANT_FILE_UPLOAD_BATCH.BATCH_ID is '商户批次号'
/comment on column MERCHANT_FILE_UPLOAD_BATCH.BATCH_STATUS is '批次状态
CREATED
SUCCESS'
/comment on column MERCHANT_FILE_UPLOAD_BATCH.CONFIRM_TIME is '确认时间'
/create unique index BATCH_UNon MERCHANT_FILE_UPLOAD_BATCH (OID_TRADERNO, BATCH_ID)
/create index BATCH_CREATE_TIME_INDEXon MERCHANT_FILE_UPLOAD_BATCH (CREATE_TIME)
/

MERCHANT_FILE_UPLOAD_RECORD 文件上传记录表

-- auto-generated definition
create table MERCHANT_FILE_UPLOAD_RECORD
(RECORD_ID    NUMBER not nullconstraint MERCHANT_FILE_UPLOAD_RECORD_PKprimary key,OID_TRADERNO VARCHAR2(32),PHOTO_TYPE   VARCHAR2(64),PHOTO_SIZE   NUMBER(32),PHOTO_ID     VARCHAR2(256),CREATE_TIME  TIMESTAMP(6),UPDATE_TIME  TIMESTAMP(6),BATCH_ID     VARCHAR2(32),FILE_MD5     VARCHAR2(64)
)
/comment on column MERCHANT_FILE_UPLOAD_RECORD.RECORD_ID is '主键id'
/comment on column MERCHANT_FILE_UPLOAD_RECORD.OID_TRADERNO is '商户号'
/comment on column MERCHANT_FILE_UPLOAD_RECORD.PHOTO_TYPE is '照片类型'
/comment on column MERCHANT_FILE_UPLOAD_RECORD.PHOTO_SIZE is '照片大小,单位为字节'
/comment on column MERCHANT_FILE_UPLOAD_RECORD.PHOTO_ID is '照片ID,返回的照片ID'
/create index CREATE_TIME_INDEXon MERCHANT_FILE_UPLOAD_RECORD (CREATE_TIME)
/create unique index MERCHANT_FILE_UPLOAD_UINDEXon MERCHANT_FILE_UPLOAD_RECORD (OID_TRADERNO, PHOTO_TYPE, BATCH_ID)
/create index MD5__INDEXon MERCHANT_FILE_UPLOAD_RECORD (FILE_MD5)
/

接口设计

一 附件上传接口

请求报文:

参数名 出现要求 描述
bankMchtId M(18) 商户号
batchId M(32) 文件上传批次号,用于文件上传确认
photoType M(2) 上传照片的类型(见字典6.5)
photo M Base64编码的照片,将编码后的****+*替换成*-****

二 .附件确认

请求报文:

参数名 出现要求 描述
bankMchtId M(18) 商户号
batchId M(32) 文件上传批次号,用于文件上传确认

代码实现

碰到几个问题

  1. 图片转base64是需要把 *+*替换成*-*

    base64转码采用

    java.util.Base64

    编码:

    Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get("微信图片_20201104162519.jpg"))).replaceAll("\\+", "-")

    解码:

    Base64.getDecoder().decode(reqVO.getPhoto().replaceAll("-", "+"))
    
  2. 图片超过2MB,被springboot自带的tomcat 限制无法正常上传.

    application.properties springboot 1.5.版本

    需要设置: server.tomcat.max-http-post-size=-1

参考文档:

  1. https://www.cnblogs.com/xyabk/p/9012612.html

通过API接口实现图片上传相关推荐

  1. oAuth2.0商品发布API接口,店铺上传接口,店铺商品发布接口,超详细的介绍

    一.新商品发布接口,商品上下架接口,店铺上传接口,新的接口对接方式文档如下: 第一步:打开开放平台链接:https://open.taobao.com/docV3.htm?spm=a219a.7386 ...

  2. php 接收 oc 图片上传,php yii2接口中图片上传

    现在在给ios给接口,遇到了一些图片上传的问题,现在可以接收到ios传来的base64编码后的数据.我是否需要解码?解码又需要怎么处理才能把图片上传到服务器,并从服务器获取URL来存入到数据库呢?求大 ...

  3. 1688以图搜货接口,1688图片搜索接口,拍立淘接口,以图搜商品接口,图片上传搜索商品接口,按图搜索接口代码对接参数说明

    一.接口说明: 有两种方式可以通过图片url地址请求获取到图片上的相似商品列表,然后再次拿到商品详情. 点击获取key和secret 方式一:可以用淘宝/1688平台外的图片进行先上传然后再搜索商品的 ...

  4. Jmeter接口测试之图片上传

    1.先是在线程组下边创建一个http请求 2.所有的相关上传图片的设置都在http请求里面 3.里面的请求类型改成post,(图片上忘记改了)最重要的lmplementation一定要设置为java ...

  5. Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

    图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢?今天我就使用MongoDB作为图片存储 ...

  6. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 原文:Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 Asp.Net Cor ...

  7. themyleaf 图片上传_springboot thymeleaf 整合 百度富文本编辑器UEditor进行图片上传

    项目中需要使用到富文本编辑器,找来找去发现百度UEditor富文本编辑器在国内最为常用因此就尝试引入.编辑器官网是:http://ueditor.baidu.com/website/index.htm ...

  8. 优化篇-“移动端”图片上传架构的变迁

    做互联网应用少不了图片的支撑,图片的上传.浏览速度很大程度上决定着用户的体验,甚至用户去留,就因为其重要,所以,在任何时候,图片的架构和优化都在进行,不敢丝毫放松. 在以后几个章节,会从后端图片存储. ...

  9. PHP开发微信支付小微商户V3版本 图片上传、生成签名、平台证书获取、平台证书编号、敏感信息加密

    吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书.什么是商户API证书...... 好了废话不多说下面明确几个名词: 商户API证书:是由权威CA颁发,用于有关微信支付等操作API接口使 ...

最新文章

  1. 漫画:禅道程序员的一天
  2. itunes app 下载链接的几种表现形式
  3. Java中的List接口实现类LinkedList
  4. C#3.0之神奇的Lambda表达式和Lambda语句
  5. springboot和quartz整合实现动态定时任务(持久化单节点)
  6. C Primer Plus note7
  7. 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)
  8. POJ 3264:Balanced Lineup(RMQ模板题)
  9. android通过代码设置铃声_让你的手机铃声与众不同 (附ios音乐dj)
  10. C++ 代码整洁之道
  11. Chromium OS Developer Guide
  12. 【彩虹代刷v5.8】去除后门增加多套模板修复多处BUG[全开源免授权]
  13. 华为hicar支持车型列表_汽车大观| 华为的“汽车梦”
  14. 从solidWorks导出机器人URDF文件
  15. excel输入身份证号码变指数 及自动变数值如何解决?
  16. 防止U盘中毒的一个小技巧
  17. AI识别照片是谁,人脸识别face_recognition开源项目安装使用 | 机器学习
  18. Codeforces Round #672 (Div. 2) C2 - Pokémon Army (hard version)(贪心,维护变化值)
  19. 使用Ultra Librarian把bxl文件转为CAD Capture CIS的原理图库及Allegro的PCB封装库
  20. 随机生成1万个随机姓名与密码存入txt文本中

热门文章

  1. Nginx监听443端口配置SSL证书
  2. 转载颜色模式RGB888-RGB565
  3. C#练习题答案: GrandChild养成了叔叔的习惯【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  4. Idea创建控制台程序
  5. vs2019中使用github看不到更改按钮如何解决
  6. 政务中心3D室内导航系统
  7. 2、HelloWorld的记事本编写
  8. 高中计算机学考什么时候,2019年江苏高中学业水平信息技术考试时间:12月15日-17日...
  9. docker kill 强制停止容器
  10. JavaScript中的Object对象