通過API介面實現圖片上傳
通過API介面實現圖片上傳
需求
近期在介面功能實現要求,實現一個API圖片上傳,補充商戶開戶後補充圖片資訊,用於管理人員稽核.
業務要求
- 圖片有多條,法人資訊,授權資訊,等 有必填圖片,有非必填圖片,檔案大小限制為2MB.
- 必填的圖片未上傳,則本次均不錄入資料庫.
- 圖片要求在一次確認後,稽核人員才能顯示.
- 需要進行相關得記錄,用於後續檢視.
詳細設計
為了滿足以上實現,有兩種實現方式
- 單個批量介面 所有的檔案通過一個介面批量上傳.
- 檔案單條上傳+確認上傳.
檔案大小在2MB,如果批量上傳,10個檔案就要20MB,耗時很長,而且會佔用頻寬,批量介面實現起來比較複雜,評估後,決定使用單條上傳+確認上傳兩步的方式.
流程圖
附件上傳:
附件確認:
風險點和優化事項
- 重複多次上傳進行限制.
- 針對重複圖片,同批次進行MD5判斷,如果已存在則不需要傳入到內部的檔案服務.
資料庫表設計
MERCHANT_FILE_UPLOAD_BATCH 檔案批次上傳表
-- auto-generated definition
create table MERCHANT_FILE_UPLOAD_BATCH
(
PKID NUMBER not null
constraint MERCHANT_FILE_UPLOAD_BATCH_PK
primary 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_UN
on MERCHANT_FILE_UPLOAD_BATCH (OID_TRADERNO, BATCH_ID)
/
create index BATCH_CREATE_TIME_INDEX
on MERCHANT_FILE_UPLOAD_BATCH (CREATE_TIME)
/
MERCHANT_FILE_UPLOAD_RECORD 檔案上傳記錄表
-- auto-generated definition
create table MERCHANT_FILE_UPLOAD_RECORD
(
RECORD_ID NUMBER not null
constraint MERCHANT_FILE_UPLOAD_RECORD_PK
primary 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_INDEX
on MERCHANT_FILE_UPLOAD_RECORD (CREATE_TIME)
/
create unique index MERCHANT_FILE_UPLOAD_UINDEX
on MERCHANT_FILE_UPLOAD_RECORD (OID_TRADERNO, PHOTO_TYPE, BATCH_ID)
/
create index MD5__INDEX
on 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) | 檔案上傳批次號,用於檔案上傳確認 |
程式碼實現
碰到幾個問題
-
圖片轉base64是需要把 *+*替換成*-*
base64轉碼採用
java.util.Base64
編碼:
Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get("微信圖片_20201104162519.jpg"))).replaceAll("\\+", "-")
解碼:
Base64.getDecoder().decode(reqVO.getPhoto().replaceAll("-", "+"))
-
圖片超過2MB,被springboot自帶的tomcat 限制無法正常上傳.
application.properties springboot 1.5.版本
需要設定: server.tomcat.max-http-post-size=-1
參考文件:
- https://www.cnblogs.com/xyabk/p/9012612.html
相關文章
- vue 實現貼上上傳圖片Vue
- formData原生實現圖片上傳ORM
- 如何呼叫第三方API實現圖片上傳。API
- PHP實現圖片(檔案)上傳PHP
- 通過圖片地址,將圖片處理成base64,使用ajax上傳圖片
- node+express實現圖片上傳功能Express
- layui中實現上傳圖片壓縮UI
- HTML5實現圖片上傳2HTML
- 如何實現微信中貼上圖片的介面
- 知識點系列一---上傳圖片並通過canvas展示Canvas
- Java實現圖片上傳到伺服器,並把上傳的圖片讀取出來Java伺服器
- angularjs 實現圖片上傳實時預覽AngularJS
- element-ui+Vue實現的圖片上傳UIVue
- Ajax+PHP實現非同步圖片上傳PHP非同步
- django 實現圖片上傳和顯示操作Django
- jsp+springmvc實現檔案上傳、圖片上傳和及時預覽圖片JSSpringMVC
- Qt實現圖片拖拽上傳過濾資料夾內圖片自動搜尋列表展示QT
- SpringMVC實現ajax上傳圖片實時預覽SpringMVC
- 上傳圖片
- 直播帶貨軟體開發過程中,如何實現圖片上傳
- 用Flask寫一個上傳圖片的APIFlaskAPI
- struts:實現圖片的上傳 argument type mismatch errorError
- 使用Vue實現圖片上傳的三種方式Vue
- 用Vue來實現圖片上傳多種方式Vue
- vue 實現剪裁圖片並上傳伺服器Vue伺服器
- 移動端H5實現圖片上傳H5
- 原生jq實現圖片上傳到伺服器伺服器
- 通過配置檔案(.htaccess)實現檔案上傳
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 前端的圖片壓縮image-compressor(可在圖片上傳前實現圖片壓縮)前端
- Django實現圖片上傳並前端頁面顯示Django前端
- FileReader初步使用實現上傳圖片預覽效果
- PHP+jQuery+Ajax實現多圖片上傳介紹PHPjQuery
- js實現的判斷上傳圖片的型別JS型別
- 前端通過background實現圖片裁剪顯示的方法前端
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- 圖片上傳及圖片處理