diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index 299cae0..680098c 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -1,6 +1,7 @@ package com.qiwenshare.file.controller; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch.core.search.HighlighterEncoder; @@ -24,10 +25,14 @@ import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.dto.file.*; import com.qiwenshare.file.io.QiwenFile; import com.qiwenshare.file.util.QiwenFileUtil; +import com.qiwenshare.file.util.RestResult2; import com.qiwenshare.file.util.TreeNode; import com.qiwenshare.file.vo.file.FileDetailVO; import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.SearchFileVO; +import com.qiwenshare.ufop.factory.UFOPFactory; +import com.qiwenshare.ufop.operation.copy.Copier; +import com.qiwenshare.ufop.operation.copy.domain.CopyFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -35,12 +40,16 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.eclipse.jetty.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ClassUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.io.ByteArrayInputStream; +import java.io.FileInputStream; import java.io.IOException; +import java.net.URLDecoder; import java.util.*; @Tag(name = "file", description = "该接口为文件接口,主要用来做一些文件的基本操作,如创建目录,删除,移动,复制等。") @@ -53,33 +62,103 @@ public class FileController { IFileService fileService; @Resource IUserFileService userFileService; - + @Resource + UFOPFactory ufopFactory; @Resource FileDealComp fileDealComp; @Resource AsyncTaskComp asyncTaskComp; @Autowired private ElasticsearchClient elasticsearchClient; - + @Value("${ufop.storage-type}") + private Integer storageType; public static final String CURRENT_MODULE = "文件接口"; - - @Operation(summary = "创建文件", description = "目录(文件夹)的创建", tags = {"file"}) - @RequestMapping(value = "/createfile", method = RequestMethod.POST) - @MyLog(operation = "创建文件", module = CURRENT_MODULE) + @Operation(summary = "创建文件", description = "创建文件", tags = {"file"}) @ResponseBody - public RestResult createFile(@Valid @RequestBody CreateFileDTO createFileDto) { + @RequestMapping(value = "/createFile", method = RequestMethod.POST) + public RestResult createFile(@Valid @RequestBody CreateFileDTO createFileDTO) { - JwtUser sessionUserBean = SessionUtil.getSession(); + try { + + Long userId = SessionUtil.getSession().getUserId(); + String filePath = createFileDTO.getFilePath(); + String fileName = createFileDTO.getFileName(); + String extendName = createFileDTO.getExtendName(); + List userFiles = userFileService.selectSameUserFile(fileName, filePath, extendName, userId); + if (userFiles != null && !userFiles.isEmpty()) { + return RestResult.fail().message("同名文件已存在"); + } + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + + String templateFilePath = ""; + if ("docx".equals(extendName)) { + templateFilePath = "template/Word.docx"; + } else if ("xlsx".equals(extendName)) { + templateFilePath = "template/Excel.xlsx"; + } else if ("pptx".equals(extendName)) { + templateFilePath = "template/PowerPoint.pptx"; + } else if ("txt".equals(extendName)) { + templateFilePath = "template/Text.txt"; + } else if ("drawio".equals(extendName)) { + templateFilePath = "template/Drawio.drawio"; + } + String url2 = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath(); + url2 = URLDecoder.decode(url2, "UTF-8"); + FileInputStream fileInputStream = new FileInputStream(url2); + Copier copier = ufopFactory.getCopier(); + CopyFile copyFile = new CopyFile(); + copyFile.setExtendName(extendName); + String fileUrl = copier.copy(fileInputStream, copyFile); + + FileBean fileBean = new FileBean(); + fileBean.setFileId(IdUtil.getSnowflakeNextIdStr()); + fileBean.setFileSize(0L); + fileBean.setFileUrl(fileUrl); + fileBean.setStorageType(storageType); + fileBean.setIdentifier(uuid); + fileBean.setCreateTime(DateUtil.getCurrentTime()); + fileBean.setCreateUserId(SessionUtil.getSession().getUserId()); + fileBean.setFileStatus(1); + boolean saveFlag = fileService.save(fileBean); + UserFile userFile = new UserFile(); + if (saveFlag) { + userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); + userFile.setUserId(userId); + userFile.setFileName(fileName); + userFile.setFilePath(filePath); + userFile.setDeleteFlag(0); + userFile.setIsDir(0); + userFile.setExtendName(extendName); + userFile.setUploadTime(DateUtil.getCurrentTime()); + userFile.setFileId(fileBean.getFileId()); + + userFileService.save(userFile); + } + return RestResult.success().message("文件创建成功"); + } catch (Exception e) { + log.error(e.getMessage()); + return RestResult.fail().message(e.getMessage()); + } + } + + @Operation(summary = "创建文件夹", description = "目录(文件夹)的创建", tags = {"file"}) + @RequestMapping(value = "/createFold", method = RequestMethod.POST) + @MyLog(operation = "创建文件夹", module = CURRENT_MODULE) + @ResponseBody + public RestResult createFold(@Valid @RequestBody CreateFoldDTO createFoldDto) { + + Long userId = SessionUtil.getSession().getUserId(); + String filePath = createFoldDto.getFilePath(); - boolean isDirExist = fileDealComp.isDirExist(createFileDto.getFileName(), createFileDto.getFilePath(), sessionUserBean.getUserId()); + boolean isDirExist = fileDealComp.isDirExist(createFoldDto.getFileName(), createFoldDto.getFilePath(), userId); if (isDirExist) { - return RestResult.fail().message("同名文件已存在"); + return RestResult.fail().message("同名文件夹已存在"); } - UserFile userFile = QiwenFileUtil.getQiwenDir(sessionUserBean.getUserId(), createFileDto.getFilePath(), createFileDto.getFileName()); + UserFile userFile = QiwenFileUtil.getQiwenDir(userId, filePath, createFoldDto.getFileName()); userFileService.save(userFile); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); @@ -90,7 +169,7 @@ public class FileController { @GetMapping(value = "/search") @MyLog(operation = "文件搜索", module = CURRENT_MODULE) @ResponseBody - public RestResult> searchFile(SearchFileDTO searchFileDTO) { + public RestResult2 searchFile(SearchFileDTO searchFileDTO) { JwtUser sessionUserBean = SessionUtil.getSession(); int currentPage = (int)searchFileDTO.getCurrentPage() - 1; @@ -146,7 +225,7 @@ public class FileController { searchFileVOList.add(searchFileVO); asyncTaskComp.checkESUserFileId(searchFileVO.getUserFileId()); } - return RestResult.success().data(searchFileVOList); + return RestResult2.success().dataList(searchFileVOList, searchFileVOList.size()); } @@ -185,7 +264,7 @@ public class FileController { @Operation(summary = "获取文件列表", description = "用来做前台列表展示", tags = {"file"}) @RequestMapping(value = "/getfilelist", method = RequestMethod.GET) @ResponseBody - public RestResult getFileList( + public RestResult2 getFileList( @Parameter(description = "文件路径", required = true) String filePath, @Parameter(description = "当前页", required = true) long currentPage, @Parameter(description = "页面数量", required = true) long pageCount){ @@ -193,13 +272,7 @@ public class FileController { IPage fileList = userFileService.userFileList(null, filePath, currentPage, pageCount); - - Map map = new HashMap<>(); - map.put("total", fileList.getTotal()); - map.put("list", fileList.getRecords()); - - - return RestResult.success().data(map); + return RestResult2.success().dataList(fileList.getRecords(), fileList.getTotal()); } @@ -336,7 +409,7 @@ public class FileController { @Operation(summary = "通过文件类型选择文件", description = "该接口可以实现文件格式分类查看", tags = {"file"}) @RequestMapping(value = "/selectfilebyfiletype", method = RequestMethod.GET) @ResponseBody - public RestResult>> selectFileByFileType(@Parameter(description = "文件类型", required = true) int fileType, + public RestResult2 selectFileByFileType(@Parameter(description = "文件类型", required = true) int fileType, @Parameter(description = "当前页", required = true) @RequestParam(defaultValue = "1") long currentPage, @Parameter(description = "页面数量", required = true) @RequestParam(defaultValue = "10") long pageCount) { @@ -345,10 +418,8 @@ public class FileController { long userId = sessionUserBean.getUserId(); IPage result = userFileService.getFileByFileType(fileType, currentPage, pageCount, userId); - Map map = new HashMap<>(); - map.put("list", result.getRecords()); - map.put("total", result.getTotal()); - return RestResult.success().data(map); + + return RestResult2.success().dataList(result.getRecords(), result.getTotal()); } diff --git a/src/main/java/com/qiwenshare/file/controller/NoticeController.java b/src/main/java/com/qiwenshare/file/controller/NoticeController.java index 6e84e2f..4527aa4 100644 --- a/src/main/java/com/qiwenshare/file/controller/NoticeController.java +++ b/src/main/java/com/qiwenshare/file/controller/NoticeController.java @@ -5,6 +5,7 @@ import com.qiwenshare.common.result.RestResult; import com.qiwenshare.file.api.INoticeService; import com.qiwenshare.file.domain.Notice; import com.qiwenshare.file.dto.notice.NoticeListDTO; +import com.qiwenshare.file.util.RestResult2; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,7 +31,7 @@ public class NoticeController { @Operation(summary = "得到所有的公告列表", tags = {"公告管理"}) @RequestMapping(value = "/list", method = RequestMethod.GET) @ResponseBody - public RestResult selectUserList(@Parameter(description = "当前页,从1开始") @RequestParam(defaultValue = "1") int page, + public RestResult2 selectUserList(@Parameter(description = "当前页,从1开始") @RequestParam(defaultValue = "1") int page, @Parameter(description = "页大小") @RequestParam(defaultValue = "10") int pageSize, @Parameter(description = "标题") @RequestParam(required = false) String title, @Parameter(description = "发布者") @RequestParam(required = false) Long publisher, @@ -46,10 +47,7 @@ public class NoticeController { noticeListDTO.setEndTime(endTime); IPage noticeIPage = noticeService.selectUserPage(noticeListDTO); - Map map = new HashMap<>(); - map.put("total", noticeIPage.getTotal()); - map.put("list", noticeIPage.getRecords()); - return RestResult.success().data(map); + return RestResult2.success().dataList(noticeIPage.getRecords(), noticeIPage.getTotal()); } @Operation(summary = "查询公告详情", tags = {"公告管理"}) diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index 65b0913..945fdce 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -87,69 +87,6 @@ public class OfficeController { @Autowired private HistoryManager historyManager; - @Operation(summary = "创建office文件", description = "创建office文件", tags = {"office"}) - @ResponseBody - @RequestMapping(value = "/createofficefile", method = RequestMethod.POST) - public RestResult createOfficeFile(@RequestBody CreateOfficeFileDTO createOfficeFileDTO) { - RestResult result = new RestResult<>(); - try{ - - JwtUser loginUser = SessionUtil.getSession(); - String fileName = createOfficeFileDTO.getFileName(); - String filePath = createOfficeFileDTO.getFilePath(); - String extendName = createOfficeFileDTO.getExtendName(); - List userFiles = userFileService.selectSameUserFile(fileName, filePath, extendName, loginUser.getUserId()); - if (userFiles != null && !userFiles.isEmpty()) { - return RestResult.fail().message("同名文件已存在"); - } - String uuid = UUID.randomUUID().toString().replaceAll("-",""); - - String templateFilePath = ""; - if ("docx".equals(extendName)) { - templateFilePath = "template/Word.docx"; - } else if ("xlsx".equals(extendName)) { - templateFilePath = "template/Excel.xlsx"; - } else if ("pptx".equals(extendName)) { - templateFilePath = "template/PowerPoint.pptx"; - } - String url2 = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath(); - url2 = URLDecoder.decode(url2, "UTF-8"); - FileInputStream fileInputStream = new FileInputStream(url2); - Copier copier = ufopFactory.getCopier(); - CopyFile copyFile = new CopyFile(); - copyFile.setExtendName(extendName); - String fileUrl = copier.copy(fileInputStream, copyFile); - - FileBean fileBean = new FileBean(); - fileBean.setFileId(IdUtil.getSnowflakeNextIdStr()); - fileBean.setFileSize(0L); - fileBean.setFileUrl(fileUrl); - fileBean.setStorageType(storageType); - fileBean.setIdentifier(uuid); - fileBean.setCreateTime(DateUtil.getCurrentTime()); - fileBean.setCreateUserId(loginUser.getUserId()); - fileBean.setFileStatus(1); - boolean saveFlag = fileService.save(fileBean); - UserFile userFile = new UserFile(); - if(saveFlag) { - userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); - userFile.setUserId(loginUser.getUserId()); - userFile.setFileName(fileName); - userFile.setFilePath(filePath); - userFile.setDeleteFlag(0); - userFile.setIsDir(0); - userFile.setExtendName(extendName); - userFile.setUploadTime(DateUtil.getCurrentTime()); - userFile.setFileId(fileBean.getFileId()); - userFileService.save(userFile); - } - return RestResult.success().message("文件创建成功"); - } catch (Exception e) { - log.error(e.getMessage()); - return RestResult.fail().message(e.getMessage()); - } - } - @Operation(summary = "预览office文件", description = "预览office文件", tags = {"office"}) @RequestMapping(value = "/previewofficefile", method = RequestMethod.POST) @ResponseBody diff --git a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java index 39de806..721f87a 100644 --- a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java +++ b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java @@ -11,6 +11,7 @@ import com.qiwenshare.file.domain.RecoveryFile; import com.qiwenshare.file.dto.file.DeleteRecoveryFileDTO; import com.qiwenshare.file.dto.recoveryfile.BatchDeleteRecoveryFileDTO; import com.qiwenshare.file.dto.recoveryfile.RestoreFileDTO; +import com.qiwenshare.file.util.RestResult2; import com.qiwenshare.file.vo.file.RecoveryFileListVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -78,14 +79,10 @@ public class RecoveryFileController { @Operation(summary = "回收文件列表", description = "回收文件列表", tags = {"recoveryfile"}) @RequestMapping(value = "/list", method = RequestMethod.POST) @ResponseBody - public RestResult> getRecoveryFileList() { + public RestResult2 getRecoveryFileList() { JwtUser sessionUserBean = SessionUtil.getSession(); - RestResult> restResult = new RestResult>(); List recoveryFileList = recoveryFileService.selectRecoveryFileList(sessionUserBean.getUserId()); - restResult.setData(recoveryFileList); - restResult.setSuccess(true); - - return restResult; + return RestResult2.success().dataList(recoveryFileList, recoveryFileList.size()); } @Operation(summary = "还原文件", description = "还原文件", tags = {"recoveryfile"}) diff --git a/src/main/java/com/qiwenshare/file/controller/ShareController.java b/src/main/java/com/qiwenshare/file/controller/ShareController.java index 9cfa58b..b632498 100644 --- a/src/main/java/com/qiwenshare/file/controller/ShareController.java +++ b/src/main/java/com/qiwenshare/file/controller/ShareController.java @@ -19,6 +19,7 @@ import com.qiwenshare.file.domain.ShareFile; import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.dto.sharefile.*; import com.qiwenshare.file.io.QiwenFile; +import com.qiwenshare.file.util.RestResult2; import com.qiwenshare.file.vo.share.ShareFileListVO; import com.qiwenshare.file.vo.share.ShareFileVO; import com.qiwenshare.file.vo.share.ShareListVO; @@ -150,30 +151,27 @@ public class ShareController { @Operation(summary = "查看已分享列表", description = "查看已分享列表", tags = {"share"}) @GetMapping(value = "/shareList") @ResponseBody - public RestResult shareList(ShareListDTO shareListDTO) { + public RestResult2 shareList(ShareListDTO shareListDTO) { JwtUser sessionUserBean = SessionUtil.getSession(); List shareList = shareService.selectShareList(shareListDTO, sessionUserBean.getUserId()); int total = shareService.selectShareListTotalCount(shareListDTO, sessionUserBean.getUserId()); - Map map = new HashMap<>(); - map.put("total", total); - map.put("list", shareList); - return RestResult.success().data(map); + return RestResult2.success().dataList(shareList, total); } @Operation(summary = "分享文件列表", description = "分享列表", tags = {"share"}) @GetMapping(value = "/sharefileList") @ResponseBody - public RestResult> shareFileList(ShareFileListDTO shareFileListBySecretDTO) { + public RestResult2 shareFileList(ShareFileListDTO shareFileListBySecretDTO) { String shareBatchNum = shareFileListBySecretDTO.getShareBatchNum(); String shareFilePath = shareFileListBySecretDTO.getShareFilePath(); List list = shareFileService.selectShareFileList(shareBatchNum, shareFilePath); for (ShareFileListVO shareFileListVO : list) { shareFileListVO.setShareFilePath(shareFilePath); } - return RestResult.success().data(list); + return RestResult2.success().dataList(list, list.size()); } @Operation(summary = "分享类型", description = "可用此接口判断是否需要提取码", tags = {"share"}) diff --git a/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java b/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java index 278a62e..e085875 100644 --- a/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java @@ -5,17 +5,20 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; @Data -@Schema(name = "创建文件DTO",required = true) public class CreateFileDTO { - @Schema(description="文件名", required=true) - @NotBlank(message = "文件名不能为空") - @Pattern(regexp = RegexConstant.FILE_NAME_REGEX, message = "文件名不合法!") - private String fileName; - @Schema(description="文件路径", required=true) + + @Schema(description = "文件路径", required = true) private String filePath; + @Schema(description = "文件名", required = true) + @NotBlank(message = "文件名不能为空") + @Pattern(regexp = RegexConstant.FILE_NAME_REGEX, message = "文件名不合法!", flags = {Pattern.Flag.CASE_INSENSITIVE}) + private String fileName; + + @Schema(description = "扩展名", required = true) + private String extendName; + } diff --git a/src/main/java/com/qiwenshare/file/dto/file/CreateFoldDTO.java b/src/main/java/com/qiwenshare/file/dto/file/CreateFoldDTO.java new file mode 100644 index 0000000..8fbba90 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/dto/file/CreateFoldDTO.java @@ -0,0 +1,20 @@ +package com.qiwenshare.file.dto.file; + +import com.qiwenshare.common.constant.RegexConstant; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +@Data +@Schema(name = "创建文件DTO",required = true) +public class CreateFoldDTO { + @Schema(description="文件名", required=true) + @NotBlank(message = "文件名不能为空") + @Pattern(regexp = RegexConstant.FILE_NAME_REGEX, message = "文件名不合法!") + private String fileName; + @Schema(description="文件路径", required=true) + private String filePath; + +} diff --git a/src/main/java/com/qiwenshare/file/util/RestResult2.java b/src/main/java/com/qiwenshare/file/util/RestResult2.java new file mode 100644 index 0000000..7c51741 --- /dev/null +++ b/src/main/java/com/qiwenshare/file/util/RestResult2.java @@ -0,0 +1,84 @@ +package com.qiwenshare.file.util; + +import com.qiwenshare.common.result.ResultCodeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class RestResult2 { + @Schema( + description = "请求是否成功", + example = "true" + ) + private Boolean success = true; + @Schema( + description = "返回码", + example = "000000" + ) + private Integer code = 0; + @Schema( + description = "返回信息", + example = "成功" + ) + private String message; + @Schema( + description = "返回数据" + ) + private T data; + @Schema( + description = "返回数据列表" + ) + private List dataList; + + private long total; + public static RestResult2 success() { + RestResult2 r = new RestResult2(); + r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess()); + r.setCode(ResultCodeEnum.SUCCESS.getCode()); + r.setMessage(ResultCodeEnum.SUCCESS.getMessage()); + return r; + } + + public static RestResult2 fail() { + RestResult2 r = new RestResult2(); + r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess()); + r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode()); + r.setMessage(ResultCodeEnum.UNKNOWN_ERROR.getMessage()); + return r; + } + + public static RestResult2 setResult(ResultCodeEnum result) { + RestResult2 r = new RestResult2(); + r.setSuccess(result.getSuccess()); + r.setCode(result.getCode()); + r.setMessage(result.getMessage()); + return r; + } + + public RestResult2 data(T param) { + this.setData(param); + return this; + } + public RestResult2 dataList(List param, long total) { + this.setDataList(param); + this.setTotal(total); + return this; + } + public RestResult2 message(String message) { + this.setMessage(message); + return this; + } + + public RestResult2 code(Integer code) { + this.setCode(code); + return this; + } + + public RestResult2 success(Boolean success) { + this.setSuccess(success); + return this; + } + +} diff --git a/src/main/resources/config/application.properties b/src/main/resources/config/application.properties index 3500bc6..67279a5 100644 --- a/src/main/resources/config/application.properties +++ b/src/main/resources/config/application.properties @@ -132,3 +132,41 @@ qiwen.file.version=1.1.2 deployment.host=192.168.1.6 + +filesize-max=5242880 + +files.storage= +files.storage.folder=documents + +files.docservice.fillforms-docs=.oform|.docx +files.docservice.viewed-docs=.pdf|.djvu|.xps|.oxps +files.docservice.edited-docs=.docx|.xlsx|.csv|.pptx|.txt|.docxf +files.docservice.convert-docs=.docm|.dotx|.dotm|.dot|.doc|.odt|.fodt|.ott|.xlsm|.xlsb|.xltx|.xltm|.xlt|.xls|.ods|.fods|.ots|.pptm|.ppt|.ppsx|.ppsm|.pps|.potx|.potm|.pot|.odp|.fodp|.otp|.rtf|.mht|.html|.htm|.xml|.epub|.fb2 +files.docservice.timeout=120000 +files.docservice.history.postfix=-hist + +files.docservice.url.site=https://officeview.qiwenshare.com/ +files.docservice.url.converter=ConvertService.ashx +files.docservice.url.command=coauthoring/CommandService.ashx +files.docservice.url.api=web-apps/apps/api/documents/api.js +files.docservice.url.preloader=web-apps/apps/api/documents/cache-scripts.html +files.docservice.url.example= + +files.docservice.secret=secret +files.docservice.header=Authorization + +files.docservice.verify-peer-off=true + +files.docservice.languages=en:English|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (People's Republic of China)|zh-TW:Chinese (Traditional, Taiwan)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lv:Latvian|lo:Lao|ms:Malay (Malaysia)|nb:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese + +url.index=/ +url.converter=/converter +url.editor=/editor +url.track=/track +url.download=/download + +logo.image= +logo.imageEmbedded= +logo.url=https://www.onlyoffice.com + +