完成以下第三方接口对接:

1.地图功能-地理/逆地理编码
2.发送短信验证码
3.COS云对象存储对接
其他:
完成文件上传/预览公共接口
This commit is contained in:
guotao 2026-01-12 18:50:25 +08:00
parent 39953cca84
commit cf2295b85f
3 changed files with 159 additions and 0 deletions

View file

@ -0,0 +1,108 @@
package com.xjhs.findmemerchant.file;
import com.xjhs.findmemerchant.common.ApiResult;
import com.xjhs.findmemerchant.file.dao.FileMetaInfo;
import com.xjhs.findmemerchant.file.dao.FileMetaInfoRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.tika.mime.MimeTypes;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
/**
* 统一文件管理控制器
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class FileController {
@Value("${appconfig.amapKey}")
private String fileSaveRoot="./file-data";
private final FileMetaInfoRepository fileMetaInfoRepository;
/**
* 获取并检查创建文件存储目录
* @return 文件存储目录带日期
*/
public Path getFileSavePath() throws IOException {
var datePath = DateTimeFormatter.ofPattern("yyyy/MM-dd").format(LocalDate.now());
var path = Path.of(this.fileSaveRoot, datePath);
if (!Files.exists(path)){
Files.createDirectories(path);
}
return path;
}
/**
* 上传文件
*
* @param file 文件数据内容
* @return 文件描信息
*/
@PostMapping("/platform/file/upload")
public ApiResult<FileMetaInfo> uploadFile(@RequestPart(name = "file") MultipartFile file) {
try {
var ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
if (StringUtils.isEmpty(ext)) {
try {
ext = MimeTypes.getDefaultMimeTypes().forName(file.getContentType()).getExtension();
} catch (Exception e) {
ext = "";
}
}
var filePath = Path.of(this.fileSaveRoot, UUID.randomUUID() + ext);
file.transferTo(filePath);
var fileMetaInfo = new FileMetaInfo();
fileMetaInfo.setName(file.getOriginalFilename());
fileMetaInfo.setContentType(file.getContentType());
fileMetaInfo.setExtension(ext);
fileMetaInfo.setSavePath(filePath.toFile().getAbsolutePath());
fileMetaInfoRepository.save(fileMetaInfo);
return ApiResult.data(fileMetaInfo);
} catch (Exception e) {
log.error(e.getMessage(),e);
return ApiResult.fail(e.getMessage());
}
}
/**
* 预览文件
* @param fileId 文件id
* @return 文件内容
*/
@GetMapping("/platform/file/view/{fileId}")
public ResponseEntity<?> uploadFile(@PathVariable("fileId") String fileId) {
return this.fileMetaInfoRepository.findById(fileId).map(item->{
try {
var bytes = Files.readAllBytes(Paths.get(item.getSavePath()));
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(item.getContentType()))
.body(bytes);
} catch (IOException e) {
return ResponseEntity.<byte[]>internalServerError().build();
}
}).orElse(ResponseEntity.<byte[]>internalServerError().build());
}
}

View file

@ -0,0 +1,41 @@
package com.xjhs.findmemerchant.file.dao;
import com.xjhs.findmemerchant.common.jpa.id.SnowflakeGenerated;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Data;
import org.hibernate.annotations.Comment;
import java.time.LocalDateTime;
/**
* 文件信息表
*/
@Data
@Entity
@Comment("文件信息表")
public class FileMetaInfo {
@Id
@SnowflakeGenerated
@Comment("主键")
private Long id;
@Comment("文件原始名称")
private String name;
@Comment("文件媒体类型")
private String contentType;
@Comment("文件扩展名称")
@Column(length = 10)
private String extension;
@Comment("本地存储路径")
private String savePath;
@Comment("是否已迁移到云服务")
private boolean moveToCloud = false;
@Comment("云对象id")
@Column(length = 50)
private String cloudObjectId;
@Comment("创建时间")
private LocalDateTime createTime = LocalDateTime.now();
}

View file

@ -0,0 +1,10 @@
package com.xjhs.findmemerchant.file.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface FileMetaInfoRepository extends JpaRepository<FileMetaInfo,String>, JpaSpecificationExecutor<FileMetaInfo> {
}