文件组件
incloud 平台提供了方便的文件上传、下载、预览功能,你可以通过简单的 http 请求或者前端组件与文件信息接口进行交互。文件存储方面提供了多种存储选项,包括文件共享、OSS、Minio 等。
上传:业务系统只需调用上传接口成后,接口将返回文件的详细信息。业务只一般需要存储下 field 方便后续操作
下载:通过fileId去文件服务下载;
预览:根据field调用预览接口,真对不同的文件格式会返回不同的预览地址;
使用方式
业务中一般不需要引入file,只需要在设计表时,设计file_id,file_name等字段,由前端直接调用file服务,上传或下载文件即可。 上传成功后,由前端返回相应的file_id,file_name等字段,业务系统只需要存储下这些字段即可。
当业务删除时,业务可以直接调用文件服务提供的删除接口。 在某些情况下,可能会存在多个业务系统共用一个文件。文档服务会根据文件的md5值计算只创建一个实际文件,但是在file的表记录中有多份copy记录,但文件流只有一份。 当所有业务都删除后,文件才会真正删除。
所以,业务上只管删就好,不用担心共享文件被删除的问题,平台底层已经实现。
API接口
@RequestMapping("/fileinfo")
public class FileInfoController {
private final static String defaultStoreType = "default";
@Operation(summary = "通过id查询")
@GetMapping("/{id}")
public Result<FileInfoVo> getById(@PathVariable("id") Long id) {
}
@Operation(summary = "通过id集合查询")
@GetMapping("/getByIds")
public Result<List<FileInfoVo>> getByIds(@RequestParam(value = "ids", required = true) String ids) {
}
@Operation(summary = "文件上传")
@PostMapping
public Result<FileInfoVo> upload(@RequestParam("file") MultipartFile file, @RequestParam(value = "fileSource", required = false, defaultValue = defaultStoreType) String fileSource,
@RequestParam(value = "poolName", required = false, defaultValue = defaultStoreType) String poolName) {
}
@Operation(summary = "通过id删除文件存储")
@DeleteMapping("/{id}")
public Result<Boolean> removeById(@PathVariable Long id) {
}
@Operation(summary = "通过id获取文件流")
@GetMapping("/stream")
@SneakyThrows
public void getFiles(@RequestParam String id, HttpServletResponse response, HttpServletRequest request) {
}
}
Last modified: 20 一月 2025