package org.dromara.system.sync; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.SynchronousRequest2; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.common.oss.factory.OssFactory; import org.dromara.system.domain.SysOss; import org.dromara.system.domain.properties.Boundary; import org.dromara.system.domain.properties.FtpConfig; import org.dromara.system.mapper.SysOssMapper; import org.dromara.system.uitil.FtpApche; import org.dromara.system.uitil.HttpUtils; import org.dromara.system.uitil.PasswordUtil; import org.jetbrains.annotations.NotNull; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @Component public class VideoPulSync { private final Boundary boundary; private final FtpConfig ftpConfig; private final SysOssMapper baseMapper; public VideoPulSync(Boundary boundary, FtpConfig ftpConfig, SysOssMapper baseMapper) { this.boundary = boundary; this.ftpConfig = ftpConfig; this.baseMapper = baseMapper; } // @Scheduled(cron = "0 0/1 * * * ?") public void get() throws IOException { System.out.println("同步上传......"); List list = FtpApche.downloadList(ftpConfig); if(list.size() == 0){ return; } for (String str : list) { //密码 String password = str.substring(0,6); //文件名称 String fileName = str.substring(6,str.length()); InputStream input = FtpApche.downloadFileFromDailyDir(str); byte[] fileBytesByName = FtpApche.getFileBytesByName(input); OssClient storage = OssFactory.instance(); MultipartFile file = new MockMultipartFile(fileName,fileName, fileName.substring(14,fileName.length()), input); // UploadResult uploadResult = storage.upload(input,getPath(fileName),"multipart/form-data; charset=ISO-8859-1"); UploadResult uploadResult; // try { uploadResult = storage.uploadSuffix2(fileBytesByName, getPath(fileName), "multipart/form-data; charset=ISO-8859-1"); FtpApche.deleteFile(str); input.close(); // buildResultEntity(fileName, fileName.substring(14,fileName.length()), "minio", uploadResult, file, // password, fileBytesByName); } } @NotNull private void buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult , MultipartFile file, String password, byte[] fileBytesByName) throws IOException { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); oss.setPassword(password); baseMapper.insert(oss); //拼接同步信息 SynchronousRequest request = new SynchronousRequest(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); request.setFile(file); request.setFileName(oss.getOriginalName()); request.setPath(uploadResult.getFilename()); request.setCreateTime(format.format(oss.getCreateTime())); request.setPassword(oss.getPassword()); request.setCreateBy("1731588854831022081"); request.setOssId(String.valueOf(oss.getOssId())); // request.setOssId("999999900"); post(request, fileBytesByName); } private String post(SynchronousRequest request, byte[] bytes) throws IOException { HashMap headers = new HashMap<>(3); String requestUrl = boundary.getVideo() + "/resource/synchronization/upload"; ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); headers.put("content-type", "application/json"); // 发送post请求 String resultData = HttpUtils.sendPostRequest2(requestUrl, request, bytes); // 并接收返回结果 System.out.println(resultData); return resultData; } public String getPath(String suffix) { return DateUtils.datePath() + "/" + suffix; } }