2 changed files with 166 additions and 2 deletions
@ -0,0 +1,164 @@ |
|||||
|
package com.zdxt.app.controller.external.company; |
||||
|
|
||||
|
import cn.hutool.core.io.FileTypeUtil; |
||||
|
import cn.hutool.core.io.FileUtil; |
||||
|
import com.google.common.collect.Lists; |
||||
|
import com.zdxt.auth.common.constant.Constants; |
||||
|
import com.zdxt.auth.common.utils.StringUtils; |
||||
|
import com.zdxt.auth.common.utils.file.FileUploadUtils; |
||||
|
import com.zdxt.auth.common.utils.file.FileUtils; |
||||
|
import com.zdxt.auth.dto.UserBean; |
||||
|
import com.zdxt.auth.feign.UserApi; |
||||
|
import com.zdxt.auth.framework.config.ServerConfig; |
||||
|
import com.zdxt.auth.framework.web.domain.AjaxResult; |
||||
|
import com.zdxt.common.ZDResponse; |
||||
|
import com.zdxt.common.config.RuoYiConfig; |
||||
|
import org.apache.commons.collections4.CollectionUtils; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import java.io.InputStream; |
||||
|
import java.util.List; |
||||
|
import java.util.Locale; |
||||
|
|
||||
|
/** |
||||
|
* 通用请求处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Controller |
||||
|
public class OutCommonController |
||||
|
{ |
||||
|
private static final Logger log = LoggerFactory.getLogger(OutCommonController.class); |
||||
|
|
||||
|
@Autowired |
||||
|
private ServerConfig serverConfig; |
||||
|
|
||||
|
@Autowired |
||||
|
private UserApi userApi; |
||||
|
/** |
||||
|
* 默认允许的文件类型 |
||||
|
* |
||||
|
* @see FileTypeUtil |
||||
|
*/ |
||||
|
private List<String> defaultAllowTypes = Lists.newArrayList( |
||||
|
"xlsx", "xls", "docx", "doc", "pdf", "txt", |
||||
|
"jpg", "jpeg", "png", "bmp", "mp4", |
||||
|
"zip"); |
||||
|
|
||||
|
/** |
||||
|
* 通用下载请求 |
||||
|
* |
||||
|
* @param fileName 文件名称 |
||||
|
* @param delete 是否删除 |
||||
|
*/ |
||||
|
@GetMapping("/external/common/download") |
||||
|
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (!FileUtils.isValidFilename(fileName)) |
||||
|
{ |
||||
|
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); |
||||
|
} |
||||
|
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); |
||||
|
String filePath = RuoYiConfig.getDownloadPath() + fileName; |
||||
|
|
||||
|
response.setCharacterEncoding("utf-8"); |
||||
|
response.setContentType("multipart/form-data"); |
||||
|
response.setHeader("Content-Disposition", |
||||
|
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName)); |
||||
|
FileUtils.writeBytes(filePath, response.getOutputStream()); |
||||
|
if (delete) |
||||
|
{ |
||||
|
FileUtils.deleteFile(filePath); |
||||
|
} |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
log.error("下载文件失败", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 通用上传请求 |
||||
|
*/ |
||||
|
@PostMapping("/external/common/upload") |
||||
|
@ResponseBody |
||||
|
public AjaxResult uploadFile(MultipartFile file) throws Exception |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
String fileNameTmp = file.getOriginalFilename(); |
||||
|
InputStream in = file.getInputStream(); |
||||
|
String type = FileTypeUtil.getType(in); |
||||
|
if (StringUtils.isBlank(type)) { |
||||
|
// 无法通过文件头或者扩展名识别文件类型。
|
||||
|
return AjaxResult.error("上传失败格式不符合要求"); |
||||
|
} |
||||
|
|
||||
|
String extType = FileUtil.extName(fileNameTmp); |
||||
|
if (StringUtils.isBlank(extType)) { |
||||
|
// 后缀读不到类型,直接拒绝
|
||||
|
return AjaxResult.error("无法读取文件类型"); |
||||
|
} |
||||
|
|
||||
|
// 文件头类型和后缀类型都要满足白名单
|
||||
|
if (!CollectionUtils.containsAll(defaultAllowTypes, |
||||
|
Lists.newArrayList(type.toLowerCase(Locale.ROOT), extType.toLowerCase(Locale.ROOT)))) { |
||||
|
|
||||
|
return AjaxResult.error("文件上传失败"); |
||||
|
} |
||||
|
|
||||
|
// 上传文件路径
|
||||
|
String filePath = RuoYiConfig.getUploadPath(); |
||||
|
// 上传并返回新文件名称
|
||||
|
String fileName = FileUploadUtils.upload(filePath, file); |
||||
|
log.info("文件上传"+fileName); |
||||
|
String url = fileName; |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("fileName", fileName); |
||||
|
ajax.put("url", url); |
||||
|
return ajax; |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
return AjaxResult.error(e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 本地资源通用下载 |
||||
|
*/ |
||||
|
@GetMapping("/external/common/download/resource") |
||||
|
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) |
||||
|
throws Exception |
||||
|
{ |
||||
|
// 本地资源路径
|
||||
|
String localPath = RuoYiConfig.getProfile(); |
||||
|
// 数据库资源地址
|
||||
|
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); |
||||
|
// 下载名称
|
||||
|
String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); |
||||
|
response.setCharacterEncoding("utf-8"); |
||||
|
response.setContentType("multipart/form-data"); |
||||
|
response.setHeader("Content-Disposition", |
||||
|
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName)); |
||||
|
FileUtils.writeBytes(downloadPath, response.getOutputStream()); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/external/getUserInfo") |
||||
|
@ResponseBody |
||||
|
public ZDResponse getUserInfo(){ |
||||
|
UserBean user = userApi.getCurrentUser(); |
||||
|
return ZDResponse.success("查询成功",user); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue