# dmp-file接口
## 前端使用引导
### 1.本地安装(版本号:ISC)
```
npm install dmp-file --save
```
### 2.使用方法
```js
import { uploadFile } from 'dmp-file'
/* @param url 文件服务地址 例如‘http://develop.persagy.com/dmp-file’
@param groupCode 集团编码 例如‘YL’
@param file 文件 例如‘input.files[0]’
@param func 回调函数 默认console.log步骤
* { 回调函数返回值
* msg:'',
* chunkCount:1,
* partNumber:0
* }
*/
uploadFile('http://develop.persagy.com/dmp-file', 'YL', event.target.files[0], func)
```
## 后端使用引导
### 1.引入jar坐标(Maven方式)
```
persagy
http://47.93.132.139:8081/nexus/content/repositories/persagy
com.persagy
dmp-file-starter
1.0.0
```
### 2.使用如下实例代码进行文件上传
```java
FileInfo fileInfo = FileInfoCreator.of(groupCode, businessId, appName, fileName);
// 可对fileInfo属性额外配置。如有效期等
FileStorageHelper.uploadFile(fileInfo, inputStream);
```
### 3.使用如下实例代码进行文件下载
```
// 通过文件id获取文件流,当文件url不存在时会抛出系统资源异常的错误
FileStorageHelper.downloadStream(fileId);
或者
// 1.根据文件id获取文件下载地址
FileInfo info = FileStorageHelper.downloadUrl(fileId);
// 2.通过http请求获取文件流
IoUtil.toStream(HttpUtil.downloadBytes(info.getFileDownloadUrl()));
```
## 文件管理接口
### 41001 保存文件信息
#### 接口
`http://localhost:8831/dmp-file/file/insert`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***"
}
```
| 字段 | 是否必须 | 字段说明 |
| ---------- | -------- | --------------------------------------- |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 否 | 文件类型:0-文件,1-目录 |
| fileBucket | 是 | 文件分组:默认为应用名 |
| filePath | 否 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 否 | 文件大小 |
| businessId | 否 | 关联业务Id |
| expireDate | 否 | 保留期限 |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "dev_1",
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***",
"creationTime": "20210813000000",
"creator": "wdl",
"modifiedTime": "20210813000000",
"modifier": "wdl",
"valid": 1
},
"count": 26
}
```
| 字段 | 是否必有 | 字段说明 |
| ------------ | -------- | ----------------------------------------------------- |
| id | 是 | 32位UUID |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 是 | 文件类型:0-文件,1-目录 |
| fileBucket | 否 | 文件分组:默认为应用名 |
| filePath | 是 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 是 | 文件大小 |
| businessId | 是 | 关联业务Id |
| expireDate | 否 | 保留期限 |
| creationTime | 否 | 创建时间,格式为yyyyMMddHHmmss |
| creator | 否 | 创建人账号id |
| modifiedTime | 否 | 最后更新时间,格式为yyyyMMddHHmmss |
| modifier | 否 | 最后更新账号id |
| valid | 否 | 有效状态,0-无效,1-有效 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| --------------------- | ---- | -------- |
| 2021年8月17日10:39:56 | 新增 | 新增接口 |
### 41002 更新文件信息
#### 接口
`http://localhost:8831/dmp-file/file/update`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"id": "dev_1",
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***",
"creationTime": "20210813000000",
"creator": "wdl",
"modifiedTime": "20210813000000",
"modifier": "wdl",
"valid": 1
}
```
| 字段 | 是否必须 | 字段说明 |
| ------------ | -------- | --------------------------------------- |
| id | 是 | 32位UUID |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 否 | 文件类型:0-文件,1-目录 |
| fileBucket | 是 | 文件分组:默认为应用名 |
| filePath | 否 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 否 | 文件大小 |
| businessId | 否 | 关联业务Id |
| expireDate | 否 | 保留期限 |
| creationTime | 否 | 创建时间,格式为yyyyMMddHHmmss |
| creator | 否 | 创建人账号id |
| modifiedTime | 否 | 最后更新时间,格式为yyyyMMddHHmmss |
| modifier | 否 | 最后更新账号id |
| valid | 否 | 有效状态,0-无效,1-有效 |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "dev_1",
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***",
"creationTime": "20210813000000",
"creator": "wdl",
"modifiedTime": "20210813000000",
"modifier": "wdl",
"valid": 1
},
"count": 26
}
```
| 字段 | 是否必有 | 字段说明 |
| ------------ | -------- | --------------------------------------- |
| id | 是 | 32位UUID |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 是 | 文件类型:0-文件,1-目录 |
| fileBucket | 否 | 文件分组:默认为应用名 |
| filePath | 是 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 是 | 文件大小 |
| businessId | 是 | 关联业务Id |
| expireDate | 否 | 保留期限 |
| creationTime | 否 | 创建时间,格式为yyyyMMddHHmmss |
| creator | 否 | 创建人账号id |
| modifiedTime | 否 | 最后更新时间,格式为yyyyMMddHHmmss |
| modifier | 否 | 最后更新账号id |
| valid | 否 | 有效状态,0-无效,1-有效 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| --------------------- | ---- | -------- |
| 2021年8月17日10:39:56 | 新增 | 新增接口 |
### 41003 删除文件信息
#### 接口
`http://localhost:8831/dmp-file/file/delete`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
"***"
```
| 字段 | 是否必须 | 字段说明 |
| ---- | -------- | -------- |
| id | 是 | 32位UUID |
#### 成功例子
```
{
"result": "success"
}
```
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| --------------------- | ---- | -------- |
| 2021年8月17日10:43:38 | 新增 | 新增接口 |
### 41004 根据文件id查找文件信息
#### 接口
`http://localhost:8831/dmp-file/file/load`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
"***"
```
| 字段 | 是否必须 | 字段说明 |
| ---- | -------- | -------- |
| id | 是 | 32位UUID |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "dev_1",
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***",
"creationTime": "20210813000000",
"creator": "wdl",
"modifiedTime": "20210813000000",
"modifier": "wdl",
"valid": 1
},
"count": 26
}
```
| 字段 | 是否必有 | 字段说明 |
| ------------ | -------- | --------------------------------------- |
| id | 是 | 32位UUID |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 是 | 文件类型:0-文件,1-目录 |
| fileBucket | 否 | 文件分组:默认为应用名 |
| filePath | 是 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 是 | 文件大小 |
| businessId | 是 | 关联业务Id |
| expireDate | 否 | 保留期限 |
| creationTime | 否 | 创建时间,格式为yyyyMMddHHmmss |
| creator | 否 | 创建人账号id |
| modifiedTime | 否 | 最后更新时间,格式为yyyyMMddHHmmss |
| modifier | 否 | 最后更新账号id |
| valid | 否 | 有效状态,0-无效,1-有效 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| -------- | ---- | -------- |
| | 新增 | 新增接口 |
### 41005 根据业务应用id查找文件信息
#### 接口
`http://localhost:8831/dmp-file/file/queryByBusiness`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
"***"
```
| 字段 | 是否必须 | 字段说明 |
| ---- | -------- | -------- |
| id | 是 | 32位UUID |
#### 成功例子
```
{
"result": "success",
"data": [
{
"id": "dev_1",
"groupCode": "PG",
"fileName": "major",
"fileType": "专业",
"fileBucket": "Testing",
"filePath":12,
"fileSize":"**",
"businessId":"20210813000000",
"expireDate":"***",
"creationTime": "20210813000000",
"creator": "wdl",
"modifiedTime": "20210813000000",
"modifier": "wdl",
"valid": 1
}
],
"count": 26
}
```
| 字段 | 是否必有 | 字段说明 |
| ------------ | -------- | --------------------------------------- |
| id | 是 | 32位UUID |
| groupCode | 是 | 集团编码:租户 |
| fileName | 是 | 文件名称:显示用 |
| fileType | 是 | 文件类型:0-文件,1-目录 |
| fileBucket | 否 | 文件分组:默认为应用名 |
| filePath | 是 | 文件路径:含文件名称 - 对应文件存储路径 |
| fileSize | 是 | 文件大小 |
| businessId | 是 | 关联业务Id |
| expireDate | 否 | 保留期限 |
| creationTime | 否 | 创建时间,格式为yyyyMMddHHmmss |
| creator | 否 | 创建人账号id |
| modifiedTime | 否 | 最后更新时间,格式为yyyyMMddHHmmss |
| modifier | 否 | 最后更新账号id |
| valid | 否 | 有效状态,0-无效,1-有效 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| --------------------- | ---- | -------- |
| 2021年8月17日10:46:06 | 新增 | 新增接口 |
### 41006 获得断点上传文件的分片信息
#### 接口
`http://localhost:8831/dmp-file/file/initChunkUpload?groupCode=YL&userId=0`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 是 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"fileMd5":"***",
"fileName":"***",
"chunkCount":3
}
```
| 字段 | 是否必须 | 字段说明 |
| ---------- | -------- | ------------------------------------------------------------ |
| fileMd5 | 是 | 文件内容的MD5值 |
| fileName | 是 | 文件名称 |
| chunkCount | 是 | 文件的分片数,文件切片的算子必须大于5M,且每个分片的大小不能小于5M |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "123456",
"uploadCode": 200,
"content": [
{
"partNumber":1,
"uploadUrl":"http://...,调用时使用的是PUT请求"
}
]
}
}
```
| 字段 | 子字段 | 是否必有 | 字段说明 |
| ---------- | ---------- | -------- | ------------------------------------------------------------ |
| id | | 否 | uploadCode为200会有值. |
| uploadCode | | 是 | 文件上传标识
200-秒传
202-断点续传且文件分片均已上传
203-断点续传 |
| content | | 否 | uploadCode为203会有值 |
| | partNumber | 是 | 分片序号 |
| | uploadUrl | 是 | 文件上传URL
使用该url直接上传文件到文件服务器 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| ---------------------- | ---- | -------- |
| 2021年10月23日14:52:11 | 新增 | 新增接口 |
### 41007 合并上传的断点续传文件
#### 接口
`http://localhost:8831/dmp-file/file/composeFile?groupCode=YL&userId=0`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 是 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"fileMd5":"***",
"fileName":"***",
"fileBucket":"ADM"
}
```
| 字段 | 是否必须 | 字段说明 |
| ---------- | -------- | ------------------------------------------------------------ |
| fileMd5 | 是 | 文件内容的MD5值 |
| fileName | 是 | 文件名称 |
| fileBucket | 是 | 存储空间名称
允许字符:小写字母、连字符、数字
长度为3至63
开头和结尾必须是字母或数字 |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "123456"
}
}
```
| 字段 | 是否必有 | 字段说明 |
| ---- | -------- | -------- |
| id | 是 | 文件id |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| ---------------------- | ---- | -------- |
| 2021年10月23日15:04:14 | 新增 | 新增接口 |
### 41008 获得文件上传信息
#### 接口
`http://localhost:8831/dmp-file/file/initSingleUpload?groupCode=YL&userId=0`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 是 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"fileMd5":"***",
"fileName":"***",
"fileBucket":"adm",
"fileSize":10240
}
```
| 字段 | 是否必须 | 字段说明 |
| ---------- | -------- | ------------------------------------------------------------ |
| fileMd5 | 是 | 文件内容的MD5值 |
| fileName | 是 | 文件名称 |
| fileBucket | 是 | 存储空间名称
允许字符:小写字母、连字符、数字
长度为3至63
开头和结尾必须是字母或数字 |
| fileSize | 是 | 文件内容字节长度 |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "123456",
"uploadCode": 200,
"content": [
{
"partNumber":1,
"uploadUrl":"http://...,调用时使用的是PUT请求"
}
]
}
}
```
| 字段 | 子字段 | 是否必有 | 字段说明 |
| ---------- | ---------- | -------- | ------------------------------------------------- |
| id | | 是 | 文件id |
| uploadCode | | 是 | 文件上传标识
200-秒传
201-单个文件上传 |
| content | | 否 | uploadCode为201会有值 |
| | partNumber | 是 | 分片序号 |
| | uploadUrl | 是 | 文件上传URL
使用该url直接上传文件到文件服务器 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| ---------------------- | ---- | -------- |
| 2021年10月23日14:52:11 | 新增 | 新增接口 |
### 41009 获得文件下载信息
#### 接口
`http://localhost:8831/dmp-file/file/initFileDownload?groupCode=YL&userId=0`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 是 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"fileId":"***"
}
```
| 字段 | 是否必须 | 字段说明 |
| ------ | -------- | -------- |
| fileId | 是 | 文件id |
#### 成功例子
```
{
"result": "success",
"data": {
"id": "1451771582172012545",
"groupCode": "YL",
"fileName": "572573a50fed51c18a3decbe46c1f599.jpeg",
"fileType": "0",
"fileBucket": "adm",
"fileSize": 841926,
"fileMd5": "ebda7668886ceec6fc11997844d75ff3",
"businessId": "1451771580297158658",
"fileDownloadUrl": "http://192.168.100.102:31335/adm/YL/20211023/572573a50fed51c18a3decbe46c1f599.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=persagy%2F20211023%2FGM%2B8%2Fs3%2Faws4_request&X-Amz-Date=20211023T071455Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=20db5a336991ba4a706e67e6b3154e897981f55481981d73805181100574f1f9,调用时使用的是PUT请求"
}
}
```
| 字段 | 是否必有 | 字段说明 |
| --------------- | -------- | ------------------------ |
| id | 是 | 文件id |
| groupCode | 是 | 集团编码 |
| fileName | 是 | 文件名称 |
| fileType | 是 | 文件类型,0-文件,1-文件夹 |
| fileBucket | 是 | 存储空间名称 |
| fileSize | 否 | 文件长度,单位为字节 |
| fileMd5 | 是 | 文件内容的MD5值 |
| businessId | 否 | 文件对应的业务id |
| fileDownloadUrl | 是 | 文件下载地址 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| ---------------------- | ---- | -------- |
| 2021年10月23日15:18:11 | 新增 | 新增接口 |
### 41010 根据文件id批量获取文件下载信息
#### 接口
`http://localhost:8831/dmp-file/file/queryFetchUrlsByFileIds?groupCode=XG&userId=0`
#### 请求方式
POST请求
#### RequestHeader
| key | value |
| ------------ | ---------------- |
| Content-Type | application/json |
#### RequestParam(URL中的Path参数)
| 字段 | 是否必须 | 字段说明 |
| --------- | -------- | -------- |
| userId | 是 | 用户id |
| groupCode | 否 | 集团编码 |
| projectId | 否 | 项目id |
| appId | 否 | 应用id |
#### 参数例子
```
{
"fileIds":["***"]
}
```
| 字段 | 是否必须 | 字段说明 |
| ------ | -------- | -------- |
| fileId | 是 | 文件id |
#### 成功例子
```
{
"result": "success",
"data": {
"文件id": "http://192.168.100.102:31335/adm/YL/20211023/572573a50fed51c18a3decbe46c1f599.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=persagy%2F20211023%2FGM%2B8%2Fs3%2Faws4_request&X-Amz-Date=20211023T071455Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=20db5a336991ba4a706e67e6b3154e897981f55481981d73805181100574f1f9,调用时使用的是PUT请求"
}
}
```
| 字段 | 是否必有 | 字段说明 |
| ------ | -------- | ------------------------------ |
| 文件id | 是 | 传参的文件id,值为文件下载地址 |
#### 接口修改记录
| 操作时间 | 操作 | 操作内容 |
| ---------------------- | ---- | -------- |
| 2021年12月31日15:24:46 | 新增 | 新增接口 |