一、文件上传工具类
package com.azxc.rapid.common.utils;
import org.apache.commons.lang.StringUtils;
import org.springblade.core.tool.utils.PathUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 文件上传
*/
public class UploadUtil {
@Value("${PROJECT_INTERNET_URL}")
private String PROJECT_INTERNET_URL;
/**
* 文件上传
*
* @param
* @param fileDir 文件保存路径(在upload目录下的路径,如:fileDir=user/logo,则文件保存到项目的upload/user/logo目录中)
* @param fileType 文件类型,对应FileUtil中定义的文件类型(imgType,appType,textType,videoType,mediaType,compressedType,attachType(附件包含图片,视频,音频,文件,压缩文件))
* @return
*/
public static Map<String, Object> fileUpload(MultipartFile file, String fileDir, String fileType) {
Map<String, Object> jsonMap = new HashMap<String, Object>();
// MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// MultipartFile file = multipartRequest.getFile("file");
//保存
if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
//校验文件类型
boolean check = true;
if ("imgType".equals(fileType)) {
check = FileUtil.isImage(file.getOriginalFilename());
} else if ("appType".equals(fileType)) {
check = FileUtil.isApp(file.getOriginalFilename());
} else if ("textType".equals(fileType)) {
check = FileUtil.isText(file.getOriginalFilename());
} else if ("videoType".equals(fileType)) {
check = FileUtil.isVideo(file.getOriginalFilename());
} else if ("mediaType".equals(fileType)) {
check = FileUtil.isMedia(file.getOriginalFilename());
} else if ("compressedType".equals(fileType)) {
check = FileUtil.isCompressed(file.getOriginalFilename());
} else if ("attachType".equals(fileType)) {
check = FileUtil.isAttach(file.getOriginalFilename());
}
if (check) {
//上传文件后缀名称
String extendName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String bannerId = UUID.randomUUID().toString();
//新文件名称
String newFileName = bannerId + extendName;
//应用的真实路径
//String realContextPath = request.getSession().getServletContext().getRealPath("/");
String realContextPath = PathUtil.getJarPath() + "/";
String relativePath = "upload/" + fileDir + "/" + DateUtils.parseDate(new Date(), "yyyyMMdd") + "/";
System.out.println(realContextPath + relativePath);
//新文件所属目录
File destFile = new File(realContextPath + relativePath);
if (!destFile.exists()) {
destFile.mkdirs();
}
try {
String fileUrl = relativePath + newFileName;
String logoUrl = fileUrl;
//新文件
File normalFile = new File(destFile, newFileName);
file.transferTo(normalFile);
jsonMap.put("resCode", 0);
jsonMap.put("resMsg", "文件上传成功");
jsonMap.put("fileUrl", fileUrl);
jsonMap.put("logoUrl", logoUrl);
} catch (Exception e) {
jsonMap.put("resCode", 1);
jsonMap.put("resMsg", "文件上传失败");
e.printStackTrace();
}
} else {
jsonMap.put("resCode", 1);
jsonMap.put("resMsg", "您上传的文件格式不正确");
}
} else {
jsonMap.put("resCode", 1);
jsonMap.put("resMsg", "未选择文件或文件名为空");
}
return jsonMap;
}
//链接url下载图片
public static int downloadPicture(String urlList,String path) {
URL url = null;
try {
url = new URL(urlList);
DataInputStream dataInputStream = new DataInputStream(url.openStream());
FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = dataInputStream.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
}
二、实现接口
/**
* 文件上传
*
* @param fileDir 文件保存路径(在upload目录下的路径,如:fileDir=user/logo,则文件保存到项目的upload/user/logo目录中)
* @param fileType 文件类型,对应FileUtil中定义的文件类型(imgType,appType,textType,videoType,mediaType,compressedType,attachType(附件包含图片,视频,音频,文件,压缩文件))
*/
@PostMapping(value = "/file/upload")
public @ResponseBody
Map<String, Object> upload(@RequestParam MultipartFile file) {
String fileDir="userPhotos";
String fileType="imgType";
return UploadUtil.fileUpload(file, fileDir, fileType);
}
三、运行结果