|
@@ -1,15 +1,23 @@
|
|
|
package com.onemap.file.controller;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
import com.onemap.common.core.domain.UploadZipDTO;
|
|
|
+import com.onemap.common.core.utils.StringUtils;
|
|
|
import com.onemap.common.core.web.controller.BaseController;
|
|
|
import com.onemap.common.core.web.domain.RequestResult;
|
|
|
-import com.onemap.file.domain.ShpFileDTO;
|
|
|
+import com.onemap.common.redis.service.RedisService;
|
|
|
import com.onemap.file.domain.TSpotFileDto;
|
|
|
+import com.onemap.file.utils.FixedThreadUtil;
|
|
|
import com.onemap.system.api.domain.GhtgCl;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.core.io.FileSystemResource;
|
|
|
+import org.springframework.core.io.Resource;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
+import org.springframework.util.AntPathMatcher;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import com.onemap.common.core.domain.R;
|
|
@@ -17,11 +25,22 @@ import com.onemap.common.core.utils.file.FileUtils;
|
|
|
import com.onemap.file.service.ISysFileService;
|
|
|
import com.onemap.system.api.domain.SysFile;
|
|
|
import com.onemap.system.api.RemoteApplyService;
|
|
|
+import org.springframework.web.servlet.HandlerMapping;
|
|
|
|
|
|
-import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import javax.validation.constraints.NotNull;
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.URLDecoder;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
+import java.nio.file.Paths;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
* 文件请求处理
|
|
@@ -36,6 +55,8 @@ public class SysFileController extends BaseController {
|
|
|
private ISysFileService sysFileService;
|
|
|
@Autowired
|
|
|
private RemoteApplyService applyService;
|
|
|
+ @Autowired
|
|
|
+ private RedisService redisService;
|
|
|
|
|
|
/**
|
|
|
* 文件上传
|
|
@@ -251,4 +272,66 @@ public class SysFileController extends BaseController {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @GetMapping("/getReadFolder")
|
|
|
+ public RequestResult getReadFolder(String folder) {
|
|
|
+ if (StringUtils.isEmpty(folder)) {
|
|
|
+ return RequestResult.error("folder is null");
|
|
|
+ }
|
|
|
+ File file = new File(folder);
|
|
|
+ if (!file.exists() || !file.isDirectory()) {
|
|
|
+ return RequestResult.error("folder is not exist");
|
|
|
+ }
|
|
|
+ FixedThreadUtil.FIXED_THREAD_POOL.execute(() -> {
|
|
|
+ sysFileService.getReadFolder(file);
|
|
|
+ });
|
|
|
+ return RequestResult.success("执行成功,文件数量为:" + Objects.requireNonNull(file.listFiles()).length);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件下载
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @GetMapping("/spot/download/shp/file/{id}/{uploadId}")
|
|
|
+ public ResponseEntity<Resource> uploadAttachment(@PathVariable("id") String id, @PathVariable("uploadId") String uploadId, HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ try {
|
|
|
+ String upload_id = "upliad_" + id + "_" + uploadId;
|
|
|
+ String uploadFile = redisService.getCacheObject(upload_id);
|
|
|
+ if (StringUtils.isEmpty(uploadFile)) {
|
|
|
+ return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
|
|
|
+ }
|
|
|
+ // 构建文件的完整路径
|
|
|
+ Path filePath = Paths.get(uploadFile);
|
|
|
+ File file = filePath.toFile();
|
|
|
+ Resource resource = new FileSystemResource(file);
|
|
|
+ // 如果资源不存在,返回404
|
|
|
+ if (!resource.exists()) {
|
|
|
+ return ResponseEntity.notFound().build();
|
|
|
+ }
|
|
|
+ // 获取文件MIME类型
|
|
|
+ String contentType = Files.probeContentType(filePath);
|
|
|
+ if (contentType == null) {
|
|
|
+ // 如果无法确定MIME类型,则使用默认值
|
|
|
+ contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE;
|
|
|
+ }
|
|
|
+ String d0_name = file.getName();
|
|
|
+ String d1_name = URLEncoder.encode(d0_name, "UTF-8");
|
|
|
+ // 设置HTTP头部信息
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + d1_name);
|
|
|
+ headers.setContentType(MediaType.parseMediaType(contentType));
|
|
|
+// headers.setAccessControlAllowOrigin("*");
|
|
|
+ // 返回文件资源
|
|
|
+ return ResponseEntity.ok().headers(headers).contentLength(Files.size(filePath)) // 可选:设置内容长度
|
|
|
+ .body(resource);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 处理IO异常,例如文件不存在或无法读取
|
|
|
+// e.printStackTrace();
|
|
|
+ return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|