赫艾后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
5.9 KiB

  1. package com.heai.modules.ftp.controller;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import com.heai.common.exception.RRException;
  5. import com.heai.common.utils.ConfigConstant;
  6. import com.heai.common.utils.PageUtils;
  7. import com.heai.common.utils.R;
  8. import com.heai.common.utils.RandomUtil;
  9. import com.heai.modules.ftp.util.FTPUtils;
  10. import com.heai.modules.oss.entity.SysOssEntity;
  11. import com.heai.modules.oss.service.SysOssService;
  12. import com.heai.modules.sys.controller.AbstractController;
  13. import com.heai.modules.sys.entity.SysUserEntity;
  14. import com.heai.modules.sys.service.SysConfigService;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.apache.shiro.authz.annotation.RequiresPermissions;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.core.io.FileSystemResource;
  19. import org.springframework.http.HttpHeaders;
  20. import org.springframework.http.MediaType;
  21. import org.springframework.http.ResponseEntity;
  22. import org.springframework.util.ClassUtils;
  23. import org.springframework.web.bind.annotation.*;
  24. import org.springframework.web.multipart.MultipartFile;
  25. import javax.servlet.http.HttpServletResponse;
  26. import java.io.File;
  27. import java.io.FileOutputStream;
  28. import java.io.InputStream;
  29. import java.io.OutputStream;
  30. import java.nio.charset.StandardCharsets;
  31. import java.util.Arrays;
  32. import java.util.Date;
  33. import java.util.Map;
  34. /**
  35. * 文件上传
  36. *
  37. *
  38. */
  39. @Slf4j
  40. @RestController
  41. @RequestMapping("ftp/file")
  42. public class SysFtpController extends AbstractController {
  43. @Autowired
  44. private SysOssService sysOssService;
  45. @Autowired
  46. private SysConfigService sysConfigService;
  47. private final static String KEY = ConfigConstant.CLOUD_STORAGE_CONFIG_KEY;
  48. /**
  49. * 列表
  50. */
  51. @GetMapping("/list")
  52. public R list(@RequestParam Map<String, Object> params){
  53. PageUtils page = sysOssService.queryPage(params);
  54. return R.ok().put("page", page);
  55. }
  56. /**
  57. * 上传文件
  58. */
  59. @PostMapping("/upload")
  60. public R upload(@RequestParam("file") MultipartFile file) throws Exception {
  61. if (file.isEmpty()) {
  62. throw new RRException("上传文件不能为空");
  63. }
  64. R r = new R();
  65. //保存文件信息
  66. SysOssEntity ossEntity = new SysOssEntity();
  67. SysUserEntity user = getUser();
  68. // 文件名
  69. String fileName = file.getOriginalFilename();
  70. // 文件类型
  71. String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
  72. String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
  73. // MultipartFile 转化 file
  74. File newFile = FTPUtils.multipartFileToFile(file,fileName);
  75. String newFileName = RandomUtil.getOrderNoByAtomic1(fileType)+suffix;
  76. // 上传路径
  77. String path = user.getUsername()+"/"+ DateUtil.format(new Date(),"yyyy-MM-dd");
  78. // ftp上传 注意文件编码格式
  79. boolean uploadStatus = FTPUtils.ftpUpload(path, newFileName, newFile);
  80. ossEntity.setFileName(file.getOriginalFilename());
  81. ossEntity.setNewFileName(newFileName);
  82. ossEntity.setUrl(path);
  83. ossEntity.setFileType(fileType);
  84. ossEntity.setCreateDate(DateUtil.date());
  85. ossEntity.setCreatedBy(user.getUsername());
  86. ossEntity.setFileSuffix(suffix);
  87. sysOssService.save(ossEntity);
  88. newFile.delete();
  89. return uploadStatus?R.ok().put("ossEntity", ossEntity):R.error("上附件失败");
  90. }
  91. /**
  92. * 删除
  93. */
  94. @PostMapping("/delete")
  95. @RequiresPermissions("sys:oss:all")
  96. public R delete(@RequestBody Long[] ids){
  97. sysOssService.removeByIds(Arrays.asList(ids));
  98. return R.ok();
  99. }
  100. /**
  101. * @Method multipartFileToFile
  102. * @Description: MultipartFile File
  103. * @author zuowenwen
  104. * @Version 1.0
  105. * @param file
  106. * @return java.io.File
  107. * @throws
  108. * @date 2020/12/17
  109. */
  110. public static File multipartFileToFile(MultipartFile file ,String fileName) throws Exception {
  111. File toFile = null;
  112. if (file.equals("") || file.getSize() <= 0) {
  113. file = null;
  114. } else {
  115. InputStream ins = null;
  116. ins = file.getInputStream();
  117. if(fileName != null && !"".equals(fileName)){
  118. toFile = new File(fileName);
  119. }else{
  120. toFile = new File(file.getOriginalFilename());
  121. }
  122. inputStreamToFile(ins, toFile);
  123. ins.close();
  124. }
  125. return toFile;
  126. }
  127. //获取流文件
  128. private static void inputStreamToFile(InputStream ins, File file) {
  129. try {
  130. OutputStream os = new FileOutputStream(file);
  131. int bytesRead = 0;
  132. byte[] buffer = new byte[8192];
  133. while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
  134. os.write(buffer, 0, bytesRead);
  135. }
  136. os.close();
  137. ins.close();
  138. } catch (Exception e) {
  139. e.printStackTrace();
  140. }
  141. }
  142. /**
  143. * @Method downFtpFile
  144. * @Description: ftp 文件流下载 (返回给前端一个文件流)
  145. * @author sxm
  146. * @Version 1.0
  147. * @param id
  148. * @return java.io.File
  149. * @throws
  150. * @date 2020/12/17
  151. */
  152. @GetMapping("/downFtpFile/{id}")
  153. public void downFtpFile(@PathVariable("id") Long id, HttpServletResponse response){
  154. // SysOssEntity resultData =sysOssService.getById(id);
  155. // String path = System.getProperty("user.dir");
  156. // File file = new File(path+"/"+resultData.getFileName());
  157. // FTPUtils.ftpDownload(resultData.getUrl(),resultData.getFileName(),file);
  158. // HttpHeaders headers = new HttpHeaders();
  159. // headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
  160. // headers.add("Content-Disposition", "attachment; filename=" + file.getName());
  161. // headers.add("Pragma", "no-cache");
  162. // headers.add("Expires", "0");
  163. // headers.add("Last-Modified", new Date().toString());
  164. // headers.add("ETag", String.valueOf(System.currentTimeMillis()));
  165. // return ResponseEntity.ok().headers(headers).contentLength(file.length()).contentType(MediaType.parseMediaType("application/octet-stream")).body(new FileSystemResource(file));
  166. // //FTPUtils.downFile(response,"",resultData.getNewFileName(),resultData.getFileName());
  167. SysOssEntity resultData =sysOssService.getById(id);
  168. FTPUtils.downFile(response,resultData.getUrl(),resultData.getNewFileName(),resultData.getFileName());
  169. }
  170. }