package jnpf.controller; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.Operation; import jnpf.base.ActionResult; import jnpf.base.vo.PaginationVO; import jnpf.constant.MsgCode; import jnpf.emnus.FilePreviewTypeEnum; import jnpf.file.YozoApi; import jnpf.model.SuffixParams; import jnpf.model.YozoFileParams; import jnpf.model.YozoParams; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** * 文档在线编辑 * * @author JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2021/5/7 */ @Tag(name = "文档在线预览编辑", description = "DocumentEdit") //@RestController //@RequestMapping("/DocumentEdit") public class DocumentEditController { @Autowired private YozoApi yozoApi; /** * 上传本地文件 * * @param file 文件 * @return * @throws IOException */ @PostMapping(value = "/uploadLocalFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Operation(summary = "上传本地文件") public ActionResult yozoUploadLocalFile(MultipartFile file) throws IOException { return yozoApi.upload(file); } /** * 新建文件 * * @param fileName 名称 * @param templateType 类型 * @return */ @GetMapping("/create") @Operation(summary = "新建文件") @Parameters({ @Parameter(name = "fileName", description = "名称"), @Parameter(name = "templateType", description = "类型"), }) public ActionResult newCreate(@RequestParam("fileName") String fileName, @RequestParam("templateType") String templateType) { return yozoApi.newCreate(fileName, templateType); } /** * 删除文件版本 * * @param fileVersionId 主键 * @return */ @GetMapping("/deleteVersion") @Operation(summary = "删除文件版本") @Parameters({ @Parameter(name = "fileVersionId", description = "主键"), }) public ActionResult deleteVersion(@RequestParam("fileVersionId") String fileVersionId) { return yozoApi.deleteVersion(fileVersionId); } /** * 批量删除文件版本 * * @param fileVersionIds 批量主键 * @return */ @GetMapping("/batchDelete") @Operation(summary = "批量删除文件版本") @Parameters({ @Parameter(name = "fileVersionIds", description = "批量主键"), }) public ActionResult batchDelete(@RequestParam("fileVersionIds") String[] fileVersionIds) { return yozoApi.batchDelete(fileVersionIds); } /** * 在线编辑 * * @param fileVersionId 主键 * @return */ @GetMapping("/onlineEditFile") @Operation(summary = "在线编辑") @Parameters({ @Parameter(name = "fileVersionId", description = "主键"), }) public ActionResult onlineEditFile(@RequestParam("fileVersionId") String fileVersionId) { return yozoApi.editFile(fileVersionId); } /** * 文档列表 * * @param pageModel 分页模型 * @return */ @PostMapping("/documentList") @Operation(summary = "文档列表") public ActionResult documentList(PaginationVO pageModel) { return yozoApi.documentList(pageModel); } /** * 本地同步编辑过后的文件 * * @param fileVersionId 主键 * @return */ @GetMapping("/updateFile") @Operation(summary = "本地同步编辑过后的文件") @Parameters({ @Parameter(name = "fileVersionId", description = "主键"), }) public ActionResult updateFile(@RequestParam("fileVersionId") String fileVersionId) { return yozoApi.updateFile(fileVersionId); } /** * 本地预览 * * @param filename 名称 * @param params 预览模型 * @param previewType 类型 * @return */ @GetMapping("/storageFilePreview") @Operation(summary = "本地预览") @Parameters({ @Parameter(name = "filename", description = "名称"), @Parameter(name = "previewType", description = "类型"), }) public Object OnlinePreview(@RequestParam("filename") String filename, SuffixParams params, @RequestParam("previewType") String previewType) throws UnsupportedEncodingException { String url; String fileName = filename.substring(0, filename.lastIndexOf(".")); String suffix = filename.substring(filename.lastIndexOf(".") + 1); if (previewType.equals(FilePreviewTypeEnum.YOZO_ONLINE_PREVIEW.getType())) { url = YozoParams.JNPF_DOMAINS + "/api/extend/DocumentPreview/down/" + fileName + "/" + suffix; } else { url = YozoParams.JNPF_DOMAINS + "/api/extend/DocumentPreview/pointDown/" + fileName + "." + suffix; url = URLEncoder.encode(url, "utf-8"); } YozoFileParams fileParams = new YozoFileParams(); BeanUtils.copyProperties(params, fileParams); fileParams.setUrl(url); return this.previewType(previewType, fileParams); } /** * 选择预览方式 yozo:永中预览; doc:kk文档预览; * 说明 采用永中url方式预览时,请注意域名是否对应 * * @param previewType * @param params * @return */ public ActionResult previewType(String previewType, YozoFileParams params) { if (params.getUrl() == null) { return ActionResult.fail(MsgCode.ETD115.get()); } if (previewType.equals(FilePreviewTypeEnum.YOZO_ONLINE_PREVIEW.getType())) { return yozoApi.getUrl(params); } //加密 byte[] sb = params.getUrl().getBytes(); String s = new String(Base64.encodeBase64(sb)); if (previewType.equals(FilePreviewTypeEnum.LOCAL_PREVIEW.getType())) { String url = YozoParams.JNPF_DOMAINS + "/api/file/onlinePreview?url=" + s; return ActionResult.success("success", url); } return ActionResult.fail(MsgCode.ETD116.get()); } }