package org.springblade.mdm.commons.service; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.tool.utils.UrlUtil; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.mapper.FlowProgramFileMapper; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.flow.vo.ProgramUploadVO; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.mdm.utils.ProgramFileNameCheckUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * OSS文件通用服务,包括下载,返回文件内容等 * * @author yangys */ @Slf4j @Service public class OssFileCommonService{ @Autowired private OssTemplate ossTemplate; /** * 获取文件内容 * @param ossFileName 文件id * @return 文件内容文本 */ public String getOssFileContent(String ossFileName) { String result; try (InputStream inputStream = ossTemplate.statFileStream(ossFileName)) { ByteArrayInputStream bos = new ByteArrayInputStream(inputStream.readAllBytes()); boolean isText = StringUtils.endsWithIgnoreCase(ossFileName,".txt") || StringUtils.endsWithIgnoreCase(ossFileName,".nc")|| StringUtils.endsWithIgnoreCase(ossFileName,".xml"); if(!isText){ isText= FileContentUtil.isTextFile(bos); } if(isText){ bos.reset(); result = FileContentUtil.getContentFromStream(bos); }else{ result = "<非文本文件>"; } } catch (IOException e) { throw new RuntimeException(e); } return result; } /** * 从oss下载文件 * @param ossFileName oss的文件名 * @param downloadFileName 指定下载的文件名 * @param response http相应 * @throws IOException 操作文件IO 异常 */ public void download(String ossFileName, String downloadFileName,HttpServletResponse response) throws IOException { response.setHeader("Content-Disposition", "attachment; filename="+ UrlUtil.encode(downloadFileName)); response.setContentType("application/octet-stream"); try(InputStream ins = ossTemplate.statFileStream(ossFileName);){ IOUtils.copy(ins,response.getOutputStream()); } } }