package com.ltkj.web.config.captcha; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.core.domain.R; import com.ltkj.common.core.domain.entity.SysDictData; import com.ltkj.common.utils.SnowFlake; import com.ltkj.common.utils.uuid.UUID; import com.ltkj.hosp.domain.SysAttachment; import com.ltkj.hosp.service.ISysAttachmentService; import com.ltkj.system.service.ISysDictDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.ltkj.common.config.ltkjConfig; import com.ltkj.common.constant.Constants; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.utils.StringUtils; import com.ltkj.common.utils.file.FileUploadUtils; import com.ltkj.common.utils.file.FileUtils; import com.ltkj.framework.config.ServerConfig; /** * 通用请求处理 * * @author ltkj */ @RestController @RequestMapping("/common") @Api(tags = "文件上传接口大全") public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @Autowired private ServerConfig serverConfig; private static final String FILE_DELIMETER = ","; @Value("${photoPath}") String photoPath; @Value("${photoServer}") String photoServer; @Value("${ltkj.profile}") String path; @Autowired private ISysAttachmentService sysAttachmentService; @Autowired private ISysDictDataService sysDictDataService; /** * 通用下载请求 * * @param fileName 文件名称 * @param delete 是否删除 */ @GetMapping("/download") public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { try { if (!FileUtils.checkAllowDownload(fileName)) { throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); } String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String filePath = ltkjConfig.getDownloadPath() + fileName; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, realFileName); FileUtils.writeBytes(filePath, response.getOutputStream()); if (delete) { FileUtils.deleteFile(filePath); } } catch (Exception e) { log.error("下载文件失败", e); } } /** * 重新写的上传图片 适用于体检套餐 */ @PostMapping("/packageUpload") public AjaxResult packageUpload(@RequestBody MultipartFile file) { String fileName = file.getOriginalFilename(); //文件后缀 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //新文件名 fileName = UUID.randomUUID() + suffixName; //文件全路径名 File dest = new File(photoPath + fileName); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { file.transferTo(dest); } catch (IOException e) { e.printStackTrace(); } AjaxResult ajax = AjaxResult.success(); String url=photoServer + fileName; ajax.put("url", url); ajax.put("fileName", fileName); ajax.put("newFileName", FileUtils.getName(fileName)); ajax.put("originalFilename", file.getOriginalFilename()); return ajax; } /** * 通用上传请求(单个) */ @PostMapping("/upload") @ApiOperation(value = "通用文件上传") public AjaxResult uploadFile(@RequestPart("file") MultipartFile file) throws Exception { try { // 上传文件路径 String filePath = ltkjConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("url", url); //ajax.put("filePath", path+fileName); ajax.put("fileName", fileName); ajax.put("newFileName", FileUtils.getName(fileName)); ajax.put("originalFilename", file.getOriginalFilename()); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } @PostMapping("/uploadImgExe") @ApiOperation(value = "EXE程序循环读取图片上传") public AjaxResult uploadImgExe(@RequestPart("file") MultipartFile file,@RequestParam("val")String dictVal,@RequestParam("ip")String ip){ try { // 上传文件路径 String filePath = ltkjConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("url", url); //ajax.put("filePath", path+fileName); ajax.put("fileName", fileName); final String newFileName = FileUtils.getName(fileName); ajax.put("newFileName", newFileName); ajax.put("originalFilename", file.getOriginalFilename()); SysAttachment sysAttachment = new SysAttachment(); sysAttachment.setId(SnowFlake.getInstance().nextId()); sysAttachment.setFileName(newFileName); sysAttachment.setFilePath(fileName); sysAttachment.setUrl(url); sysAttachment.setSysDictVal(dictVal); sysAttachment.setIp(ip); final Map map = FileUploadUtils.getFileSize(file); sysAttachment.setFileSize(map.get("fileSizeBytes")); sysAttachment.setFileSizeMb(map.get("fileSizeMB")); sysAttachment.setFileSizeGb(map.get("fileSizeGB")); sysAttachmentService.insertSysAttachment(sysAttachment); return ajax; } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(e.getMessage()); } } @GetMapping("/listExeVal") public AjaxResult listExeDictVal(){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysDictData::getDictType,"sys_exe_img_type"); final List list = sysDictDataService.list(queryWrapper); ArrayList> hashMaps = new ArrayList<>(); for (SysDictData sysDictData : list) { HashMap hashMap = new HashMap<>(); hashMap.put("label",sysDictData.getDictLabel()); hashMap.put("value",sysDictData.getDictValue()); hashMaps.add(hashMap); } return AjaxResult.success().put("data",hashMaps); } @GetMapping("/uploadFile") @ApiOperation(value = "通用文件上传base64") public AjaxResult uploadFiles(@ApiParam(value = "参数")String file){ log.info(file); return AjaxResult.success(file); } /** * 通用上传请求(多个) */ @PostMapping("/uploads") public AjaxResult uploadFiles(List files) throws Exception { try { // 上传文件路径 String filePath = ltkjConfig.getUploadPath(); List urls = new ArrayList(); List fileNames = new ArrayList(); List newFileNames = new ArrayList(); List originalFilenames = new ArrayList(); for (MultipartFile file : files) { // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; urls.add(url); fileNames.add(fileName); newFileNames.add(FileUtils.getName(fileName)); originalFilenames.add(file.getOriginalFilename()); } AjaxResult ajax = AjaxResult.success(); ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } /** * 本地资源通用下载 */ @GetMapping("/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception { try { if (!FileUtils.checkAllowDownload(resource)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); } // 本地资源路径 String localPath = ltkjConfig.getProfile(); // 数据库资源地址 String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); // 下载名称 String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(downloadPath, response.getOutputStream()); } catch (Exception e) { log.error("下载文件失败", e); } } @DeleteMapping("/deletedFile") @ApiOperation(value = "通用文件删除接口") public AjaxResult deletedFile(@RequestParam String url) { //文件后缀 File files=new File(url); String name = files.getName(); File file=new File(photoPath+name); if (file.exists()) { if(file.delete()){ return AjaxResult.success("删除成功"); } return AjaxResult.error("删除失败"); } return AjaxResult.success("删除成功"); } }