feat(api): 添加文件上传组件专用接口支持本地和OSS上传
- 在api store中新增fileUploadApplicationApi和ossUploadApplicationApi两个专用接口地址 - 从getters中移除已废弃的deployUploadApi和databaseUploadApi - 将上传组件改为使用新的专用接口,并通过mode参数区分本地和OSS上传 - 更新组件文档注释将上传方式从server改为local - 创建CuteFileUploadApi控制器提供uploadLocal和uploadOSS接口 - 在SystemLocalStorageService中实现uploadLocal方法处理本地文件上传逻辑 - 更新演示页面默认使用本地上传模式
This commit is contained in:
@@ -3,8 +3,6 @@
|
|||||||
* @type {any}
|
* @type {any}
|
||||||
*/
|
*/
|
||||||
const getters = {
|
const getters = {
|
||||||
deployUploadApi: state => state.api.deployUploadApi,
|
|
||||||
databaseUploadApi: state => state.api.databaseUploadApi,
|
|
||||||
size: state => state.app.size,
|
size: state => state.app.size,
|
||||||
sidebar: state => state.app.sidebar,
|
sidebar: state => state.app.sidebar,
|
||||||
device: state => state.app.device,
|
device: state => state.app.device,
|
||||||
@@ -24,6 +22,9 @@ const getters = {
|
|||||||
swaggerApi: state => state.api.swaggerApi,
|
swaggerApi: state => state.api.swaggerApi,
|
||||||
websocketApi: state => state.api.websocketApi,
|
websocketApi: state => state.api.websocketApi,
|
||||||
sidebarRouters: state => state.permission.sidebarRouters,
|
sidebarRouters: state => state.permission.sidebarRouters,
|
||||||
statusConst: state => state.pipeline.statusConst
|
statusConst: state => state.pipeline.statusConst,
|
||||||
|
// 上传组件专用
|
||||||
|
fileUploadApplicationApi: state => state.api.fileUploadApplicationApi,
|
||||||
|
ossUploadApplicationApi: state => state.api.ossUploadApplicationApi
|
||||||
}
|
}
|
||||||
export default getters
|
export default getters
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ const api = {
|
|||||||
fileUploadApi: baseUrl + '/api/localStorage/uploadFile',
|
fileUploadApi: baseUrl + '/api/localStorage/uploadFile',
|
||||||
// oss上传
|
// oss上传
|
||||||
ossUploadApi: baseUrl + '/api/ossStorage/uploadFile',
|
ossUploadApi: baseUrl + '/api/ossStorage/uploadFile',
|
||||||
|
// 上传组件专用
|
||||||
|
fileUploadApplicationApi: baseUrl + '/api/component/CuteFileUpload/uploadLocal',
|
||||||
|
ossUploadApplicationApi: baseUrl + '/api/component/CuteFileUpload/uploadOSS',
|
||||||
// baseUrl,
|
// baseUrl,
|
||||||
baseApi: baseUrl
|
baseApi: baseUrl
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
:headers="headers"
|
:headers="headers"
|
||||||
:on-success="handleSuccess"
|
:on-success="handleSuccess"
|
||||||
:on-error="handleError"
|
:on-error="handleError"
|
||||||
:action="ossUploadApi"
|
:action="mode === 'oss' ? ossUploadApplicationApi: fileUploadApplicationApi"
|
||||||
>
|
>
|
||||||
<i class="el-icon-upload" />
|
<i class="el-icon-upload" />
|
||||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
@@ -36,7 +36,7 @@ export default {
|
|||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 上传方式:server、oss
|
* 上传方式:local、oss
|
||||||
*/
|
*/
|
||||||
mode: {
|
mode: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -52,7 +52,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'baseApi',
|
'baseApi',
|
||||||
'ossUploadApi'
|
'fileUploadApplicationApi',
|
||||||
|
'ossUploadApplicationApi'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
:headers="headers"
|
:headers="headers"
|
||||||
:on-success="handleSuccess"
|
:on-success="handleSuccess"
|
||||||
:on-error="handleError"
|
:on-error="handleError"
|
||||||
:action="ossUploadApi"
|
:action="mode === 'oss' ? ossUploadApplicationApi: fileUploadApplicationApi"
|
||||||
>
|
>
|
||||||
<el-button size="small" type="primary">点击上传</el-button>
|
<el-button size="small" type="primary">点击上传</el-button>
|
||||||
<div slot="tip" class="el-upload__tip">只能上传不超过100MB的文件</div>
|
<div slot="tip" class="el-upload__tip">只能上传不超过100MB的文件</div>
|
||||||
@@ -34,7 +34,7 @@ export default {
|
|||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 上传方式:server、oss
|
* 上传方式:local、oss
|
||||||
*/
|
*/
|
||||||
mode: {
|
mode: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -50,7 +50,8 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'baseApi',
|
'baseApi',
|
||||||
'ossUploadApi'
|
'fileUploadApplicationApi',
|
||||||
|
'ossUploadApplicationApi'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件上传" prop="fileUrl">
|
<el-form-item label="文件上传" prop="fileUrl">
|
||||||
<cute-file-drag-upload v-model="form" />
|
<cute-file-drag-upload v-model="form" mode="local" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
|
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件上传" prop="fileUrl">
|
<el-form-item label="文件上传" prop="fileUrl">
|
||||||
<cute-file-upload v-model="form" />
|
<cute-file-upload v-model="form" mode="local" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
|
<el-button type="primary" @click="submitForm('form')">提 交</el-button>
|
||||||
|
|||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
package cn.odboy.system.application;
|
||||||
|
|
||||||
|
import cn.odboy.system.framework.operalog.OperationLog;
|
||||||
|
import cn.odboy.system.service.SystemLocalStorageService;
|
||||||
|
import cn.odboy.system.service.SystemOssStorageService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "系统组件:CuteFileUpload")
|
||||||
|
@RequestMapping("/api/component/CuteFileUpload")
|
||||||
|
public class CuteFileUploadApi {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SystemLocalStorageService systemLocalStorageService;
|
||||||
|
@Autowired
|
||||||
|
private SystemOssStorageService systemOssStorageService;
|
||||||
|
|
||||||
|
@OperationLog
|
||||||
|
@ApiOperation("上传文件到服务器本地")
|
||||||
|
@PostMapping(value = "/uploadLocal")
|
||||||
|
public ResponseEntity<String> uploadLocal(@RequestParam("file") MultipartFile file) {
|
||||||
|
String fileUrl = systemLocalStorageService.uploadLocal(file);
|
||||||
|
return ResponseEntity.ok(fileUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
@OperationLog
|
||||||
|
@ApiOperation("上传文件到OSS")
|
||||||
|
@PostMapping(value = "/uploadOSS")
|
||||||
|
public ResponseEntity<String> uploadOSS(@RequestParam("file") MultipartFile file) {
|
||||||
|
String fileUrl = systemOssStorageService.uploadFile(file);
|
||||||
|
return ResponseEntity.ok(fileUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
+38
@@ -22,6 +22,7 @@ import cn.hutool.core.io.IORuntimeException;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.odboy.base.KitPageResult;
|
import cn.odboy.base.KitPageResult;
|
||||||
import cn.odboy.constant.FileTypeEnum;
|
import cn.odboy.constant.FileTypeEnum;
|
||||||
|
import cn.odboy.framework.context.KitRequestHolder;
|
||||||
import cn.odboy.framework.exception.BadRequestException;
|
import cn.odboy.framework.exception.BadRequestException;
|
||||||
import cn.odboy.framework.properties.AppProperties;
|
import cn.odboy.framework.properties.AppProperties;
|
||||||
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
|
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
|
||||||
@@ -41,6 +42,7 @@ import org.springframework.context.annotation.Lazy;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -194,4 +196,40 @@ public class SystemLocalStorageService {
|
|||||||
}
|
}
|
||||||
wrapper.orderByDesc(SystemLocalStorageTb::getId);
|
wrapper.orderByDesc(SystemLocalStorageTb::getId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public String uploadLocal(MultipartFile multipartFile) {
|
||||||
|
long size = multipartFile.getSize();
|
||||||
|
KitFileUtil.checkSize(properties.getOss().getMaxSize(), size);
|
||||||
|
String suffix = KitFileUtil.getSuffix(multipartFile.getOriginalFilename());
|
||||||
|
String type = KitFileUtil.getFileType(suffix);
|
||||||
|
String uploadDateStr = DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMAT);
|
||||||
|
File file = KitFileUtil.upload(multipartFile, fileUploadPathHelper.getPath() + uploadDateStr + File.separator);
|
||||||
|
if (file == null) {
|
||||||
|
throw new BadRequestException("上传失败");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
String formatSize = KitFileUtil.getSize(size);
|
||||||
|
String prefixName = KitFileUtil.getPrefix(multipartFile.getOriginalFilename(), null);
|
||||||
|
SystemLocalStorageTb localStorage = new SystemLocalStorageTb();
|
||||||
|
localStorage.setRealName(file.getName());
|
||||||
|
localStorage.setName(prefixName);
|
||||||
|
localStorage.setSuffix(suffix);
|
||||||
|
localStorage.setPath(file.getPath());
|
||||||
|
localStorage.setType(type);
|
||||||
|
localStorage.setSize(formatSize);
|
||||||
|
localStorage.setDateGroup(uploadDateStr);
|
||||||
|
systemLocalStorageMapper.insert(localStorage);
|
||||||
|
// 构建上传路径 /file/20260117/odboycn-20260117055246428.png
|
||||||
|
HttpServletRequest httpServletRequest = KitRequestHolder.getHttpServletRequest();
|
||||||
|
StringBuffer requestURL = httpServletRequest.getRequestURL();
|
||||||
|
String[] splits = requestURL.toString().split("/api/component/CuteFileUpload");
|
||||||
|
String requestAddress = splits[0];
|
||||||
|
return String.format("%s/file/%s/%s", requestAddress, uploadDateStr, localStorage.getRealName());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("上传文件失败", e);
|
||||||
|
KitFileUtil.del(file);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user