@RequestMapping("/upload")
@RestController
@IgnoreToken
@SuppressWarnings("all")
public class FilesController extends BaseController {
@Value("${upload.filePath}")
private String filePath;//文件上传路径
@Value("${upload.requestPath}")
private String requestPath;//文件请求路径
public String getRequestPath() {
return requestPath;
}
public String getFilePath() {
return filePath;
}
//允许的上传文件后缀类型
@Value("${upload.allowExt}")
private String allowExt;
public String getAllowExt() {
return allowExt;
}
//允许文件上传最大限制
@Value("${upload.fileSize}")
private String fileSize;
public String getFileSize() {
return fileSize;
}
@Value("${spring.application.name}")
private String serviceName;
public String getServiceName() {
return serviceName;
}
//系统地址
@Value("${upload.domain}")
private String hostname;
public String getHostname() {
return hostname;
}
public String getFileName(String fileName) {
if (fileName.length() > 0 && fileName.indexOf(".") > -1) {
String ext;
if (fileName.indexOf("?") > -1 && fileName.lastIndexOf("?") > fileName.lastIndexOf(".")) {
ext = fileName.substring(fileName.lastIndexOf("."), fileName.lastIndexOf("?"));
} else {
ext = fileName.substring(fileName.lastIndexOf("."), fileName.length());
}
//限定支持
if (!checkExt(ext)) {
return "-1";//格式错误
}
return DateUtil.getCurrentDateStr() + "_" + UtilTools.getUUID() + ext;
}
return "";
}
public boolean checkExt(String ext) {
if (ext.length() == 0) {
return false;
}
String[] params = getAllowExt().split("\|");
for (int i = 0; i < params.length; i++) {
if (params[i].equals(ext)) {
return true;
}
}
return false;
}
@RequestMapping(value = "/uploadfiles", method = RequestMethod.POST)
public Result loadingIn(MultipartHttpServletRequest mulRequest) throws Exception {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
request.getSession().setAttribute("language", "CN");
Set> set = mulRequest.getFileMap().entrySet();
Map listFile = new LinkedHashMap<>();
//System.out.println("上传个数" + set.size());
int i = 0;
for (Map.Entry each : set) {
MultipartFile file = each.getValue();
//如果上传文件为空
if (UtilTools.isEmpty(file.getOriginalFilename())) {
continue;
}
//System.out.println("上传文件名:"+file.getOriginalFilename());
String newName = getFileName(file.getOriginalFilename());
//如果上传文件类型不允许
if ("-1".equals(newName)) {
return setResult("controller1007");
}
//System.out.println("fileSize:"+file.getSize());
int filesize = Integer.parseInt(getFileSize());
if (file.getSize() > filesize) {
return setResult("controller1008" + UtilTools.fileSizeConver(filesize) + "");
}
i++;
}
//是否存在上传文件
if (i == 0) {
return setResult("controller1009");
}
//进行文件上传
String uploadPath = mulRequest.getParameter("uploadPath");//获取其它元素值
String filesPath = UtilTools.isEmpty(uploadPath) ? "/" + this.getRequestPath() : "/" + this.getRequestPath() + uploadPath;
uploadfile(filesPath, listFile, set);
return setResult(listFile, "controller1010");
}
public void uploadfile(String filePath, Map listFile, Set> set) throws Exception {
for (Map.Entry each : set) {
String fileName = each.getKey();
MultipartFile file = each.getValue();
//如果上传文件为空
String uploadFile = file.getOriginalFilename();
if (UtilTools.isEmpty(uploadFile)) {
continue;
}
String newName = getFileName(uploadFile);
if (UtilTools.isEmpty(newName)) {
String originalFilename = file.getOriginalFilename();
if ("file".equals(originalFilename)) {
originalFilename = ".png";
}
newName = DateUtil.getCurrentDateStr() + "_" + UtilTools.getUUID() + originalFilename;
}
listFile.put(fileName, getHostname() + getServiceName() + filePath + newName);
//重命名上传文件
IoUtil.uploadFile(file.getBytes(), filePath, newName);
}
}
@RequestMapping(value = "/uploadBase64File", method = RequestMethod.POST)
@IgnoreSpecialChar
public Result uploadBase64File(String file) throws Exception {
if (UtilTools.isEmpty(file)) {
Map paramMap = getParamsMap();
file = paramMap.get("file");
}
Map listFile = new LinkedHashMap<>();
String strFilePath = "/" + this.getRequestPath() + "base64File/";
Map map = new HashMap();
if(file.indexOf(",")==-1){
return setResult("请添加Base64前缀 data:image/png;base64,");
}
map.put("file", base64toMultipart(file));
Set> set = map.entrySet();
uploadfile(strFilePath, listFile, set);
return setResult(listFile, "controller1010");
}
public MultipartFile base64toMultipart(String data) {
try {
data = data.replaceAll(" ", "+");
String[] baseStrs = data.split(",");
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(baseStrs[1]);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new Base64MultipartFile(b, baseStrs[0], "file");
} catch (IOException e) {
throw new ResultException("controller1008");
}
}
}
public class BaseController extends BaseResult {
private static final Logger log = LoggerFactory.getLogger(BaseController.class);
public String getToken(String token){
Map params = new HashMap<>();
if (StringUtils.isBlank(token) ) {
params = getParamsMap();
}else{
params.put("token",token);
}
return params.get("token");
}
public static Map getParamsMap() {
Map paramsMap = new HashMap<>();
try {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
String json = jsonRequest(request);
if (StringUtils.isNotBlank(json)) {
return JSONObject.parseObject(json, Map.class);
}
} catch (Exception e) {
log.error("base1001", e.getMessage());
}
return paramsMap;
}
//自定义返回信息描述
@Override
public Result setResult(Object obj,String msg) {
return setResult(obj==null?-1:1, msg,obj==null?new JSONObject():obj);
}
//验证失败,返回错误提示
@Override
public Result setResult(String msg) {
return setResult(null,msg);
}
@Override
public Result setResult(int code, String msg, Object obj) {
return new Result(code,msg,obj);
}
@Override
public Result setResult(Object obj){
return setResult(obj,"base1002");
}
}
public abstract class BaseResult {
abstract Result setResult(Object obj);
abstract Result setResult(Object obj,String msg);
abstract Result setResult(String msg);
abstract Result setResult(int code,String msg,Object obj);
}
public abstract class BaseService extends BaseResult {
//请求成功,正常返回数据
@Override
public Result setResult(Object obj) {
return setResult(obj,"base1002");
}
//自定义返回信息描述
@Override
public Result setResult(Object obj,String msg) {
return setResult(obj==null?-1:1, msg, obj==null?new JSONObject():obj);
}
//验证失败,返回错误提示
@Override
public Result setResult(String msg) {
return setResult(null,msg);
}
//实例化一个返回对象
@Override
public Result setResult(int code,String msg,Object obj) {
return new Result(code,msg,obj);
}
public abstract Result checkVaild(Object obj);
public Stream setResultMap(String key,Object value){
return new Stream(new ConcurrentHashMap<>()).add(key,value);
}
public Map setResultMap(){
return setResultMap("result");
}
public Map setResultMap(String key){
return setMap(key,true);
}
public Map setMap(String key,Object value){
Map resultMap = new ConcurrentHashMap<>();
resultMap.put(key,value);
return resultMap;
}
public static Predicate distinctByKey(Function super T, Object> keyExtractor) {
Map