java上传实现 spring boot +element ui

编程入门 行业动态 更新时间:2024-10-07 12:20:41

java<a href=https://www.elefans.com/category/jswz/34/1771255.html style=上传实现 spring boot +element ui"/>

java上传实现 spring boot +element ui

先从element ui el-upload组件开始介绍。

<el-uploadname="file":show-file-list="false"action="请求controller的地址":on-success="handleUploadSuccessletter" 上传成功做的一些操作:headers="headers"  获得的headers一个身份的验证
><el-link type="primary">重新上传</el-link>    //这里需要一个点击控件即可,el-button也行
</el-upload>

关于headers

在return里写,这个即可获得headers

headers: {Authorization: "Bearer " + getToken(),
},

目录

1、得到文件上传路径,getUploadPath方法

2、FileUploadUtils里的upload方法,返回一个新的文件名

3、获取url 

完整的FileUploadUtils 

再来看后台controller

@PostMapping("/upload")
public ResultJson uploadFile(MultipartFile file) throws Exception {try {// 上传文件路径,其中Config是一个Java类,里面有文件上传到路径String filePath = Config.getUploadPath();// 上传并返回新文件名称String fileName = FileUploadUtils.upload(filePath, file);String url = serverConfig.getUrl() + fileName;Map<String, String> prams = new HashMap<String, String>();//定义一个mapprams.put("fileName", fileName);prams.put("url", url);//分别放入文件名和urlreturn ResultJson.ok(prams); //返回给前台} catch (Exception e) {return ResultJson.failure(ResultCode.BAD_REQUEST, e.getMessage());}
}

大致步骤分为以下:

1、得到文件上传路径,getUploadPath方法

/*** 获取上传路径*/public static String getUploadPath(){return getProfile() + "upload";}

我们再来看getProfile()方法:

public static String getProfile(){return profile;}

这里的profile是自己定义的一个路径

2、FileUploadUtils里的upload方法,返回一个新的文件名

public static final String upload(String baseDir, MultipartFile file) throws IOException
{try{return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);}catch (Exception e){throw new IOException(e.getMessage(), e);}
}

上面的upload方法,又调用了一个upload方法,如下:(这个upload方法一个是校验文件名的长度,以及校验文件是否符合大小,并返回一个新的文件名)

public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)  //接收文件上传路径,文件名,文件类型throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,InvalidExtensionException
{
//检验文件名字的长度是否超过规定int fileNamelength = file.getOriginalFilename().length();if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH){throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);}
//文件的大小是否合格assertAllowed(file, allowedExtension);
//获取编码文件名String fileName = extractFilename(file);File desc = getAbsoluteFile(baseDir, fileName);file.transferTo(desc);String pathFileName = getPathFileName(baseDir, fileName);return pathFileName;
}

//检验文件名字的长度是否超过规定//文件的大小是否合格

/*** 文件大小校验** @param file 上传的文件* @return* @throws FileSizeLimitExceededException 如果超出最大大小* @throws InvalidExtensionException*/
public static final void assertAllowed(MultipartFile file, String[] allowedExtension)throws FileSizeLimitExceededException, InvalidExtensionException
{long size = file.getSize();if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE){throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);}String fileName = file.getOriginalFilename();String extension = getExtension(file);if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)){if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION){throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,fileName);}else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION){throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,fileName);}else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION){throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,fileName);}else{throw new InvalidExtensionException(allowedExtension, extension, fileName);}}}

//获取编码文件名 

/*** 编码文件名*/
public static final String extractFilename(MultipartFile file)
{String fileName = file.getOriginalFilename();String extension = getExtension(file);fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;return fileName;
}

得到绝对文件

private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
{File desc = new File(uploadDir + File.separator + fileName);if (!desc.getParentFile().exists()){desc.getParentFile().mkdirs();}if (!desc.exists()){desc.createNewFile();}return desc;
}

最终返回新的文件名 

private static final String getPathFileName(String uploadDir, String fileName) throws IOException
{int dirLastIndex = NiuaConfig.getProfile().length();String currentDir = StringUtils.substring(uploadDir, dirLastIndex);String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;return pathFileName;
}

MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION这个是允许上传的文件类型

public static final String[] DEFAULT_ALLOWED_EXTENSION = {// 图片"bmp", "gif", "jpg", "jpeg", "png",// word excel powerpoint"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",// 压缩文件"rar", "zip", "gz", "bz2",// pdf"pdf" ,"mp4"};

3、获取url 

/*** 获取完整的请求路径,包括:域名,端口,上下文访问路径** @return 服务地址*/public String getUrl(){HttpServletRequest request = ServletUtils.getRequest();return getDomain(request);}

4、分别将url和文件名传给前台

前台接收:

handleUploadSuccess(res) {let uploadUrlPath = res;this.dialogForm.imageUrl = uploadUrlPath.data.urlthis.loading.close();
},

完整的FileUploadUtils 

package tech.niuamon.utils.file;import java.io.File;
import java.io.IOException;
import org.apachemons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import tech.niuamon.config.NiuaConfig;
import tech.niuamon.constant.Constants;
import tech.niuamon.exception.file.FileNameLengthLimitExceededException;
import tech.niuamon.exception.file.FileSizeLimitExceededException;
import tech.niuamon.exception.file.InvalidExtensionException;
import tech.niuamon.utils.DateUtils;
import tech.niuamon.utils.StringUtils;
import tech.niuamon.utils.uuid.IdUtils;/*** @author * @title: FileUploadUtils* @projectName niua_easy_parent* @description: 文件上传工具* @date 2020/12/19 下午9:49*/
public class FileUploadUtils {/*** 默认大小 50M*/public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;/*** 默认的文件名最大长度 100*/public static final int DEFAULT_FILE_NAME_LENGTH = 100;/*** 默认上传的地址*/private static String defaultBaseDir = NiuaConfig.getProfile();public static void setDefaultBaseDir(String defaultBaseDir){FileUploadUtils.defaultBaseDir = defaultBaseDir;}public static String getDefaultBaseDir(){return defaultBaseDir;}/*** 以默认配置进行文件上传** @param file 上传的文件* @return 文件名称* @throws Exception*/public static final String upload(MultipartFile file) throws IOException{try{return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);}catch (Exception e){throw new IOException(e.getMessage(), e);}}/*** 根据文件路径上传** @param baseDir 相对应用的基目录* @param file 上传的文件* @return 文件名称* @throws IOException*/public static final String upload(String baseDir, MultipartFile file) throws IOException{try{return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);  //校验文件格式}catch (Exception e){throw new IOException(e.getMessage(), e);}}/*** 文件上传** @param baseDir 相对应用的基目录* @param file 上传的文件* @param allowedExtension 上传文件类型* @return 返回上传成功的文件名* @throws FileSizeLimitExceededException 如果超出最大大小* @throws FileNameLengthLimitExceededException 文件名太长* @throws IOException 比如读写文件出错时* @throws InvalidExtensionException 文件校验异常*/public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException{int fileNamelength = file.getOriginalFilename().length();if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH){throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);}assertAllowed(file, allowedExtension);String fileName = extractFilename(file);File desc = getAbsoluteFile(baseDir, fileName);file.transferTo(desc);String pathFileName = getPathFileName(baseDir, fileName);return pathFileName;}/*** 编码文件名*/public static final String extractFilename(MultipartFile file){String fileName = file.getOriginalFilename();String extension = getExtension(file);fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;return fileName;}private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException{File desc = new File(uploadDir + File.separator + fileName);if (!desc.getParentFile().exists()){desc.getParentFile().mkdirs();}if (!desc.exists()){desc.createNewFile();}return desc;}private static final String getPathFileName(String uploadDir, String fileName) throws IOException{int dirLastIndex = NiuaConfig.getProfile().length();String currentDir = StringUtils.substring(uploadDir, dirLastIndex);String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;return pathFileName;}/*** 文件大小校验** @param file 上传的文件* @return* @throws FileSizeLimitExceededException 如果超出最大大小* @throws InvalidExtensionException*/public static final void assertAllowed(MultipartFile file, String[] allowedExtension)throws FileSizeLimitExceededException, InvalidExtensionException{long size = file.getSize();if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE){throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);}String fileName = file.getOriginalFilename();String extension = getExtension(file);if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)){if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION){throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,fileName);}else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION){throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,fileName);}else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION){throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,fileName);}else{throw new InvalidExtensionException(allowedExtension, extension, fileName);}}}/*** 判断MIME类型是否是允许的MIME类型** @param extension* @param allowedExtension* @return*/public static final boolean isAllowedExtension(String extension, String[] allowedExtension){for (String str : allowedExtension){if (str.equalsIgnoreCase(extension)){return true;}}return false;}/*** 获取文件名的后缀** @param file 表单文件* @return 后缀名*/public static final String getExtension(MultipartFile file){String extension = FilenameUtils.getExtension(file.getOriginalFilename());if (StringUtils.isEmpty(extension)){extension = MimeTypeUtils.getExtension(file.getContentType());}return extension;}
}

更多推荐

java上传实现 spring boot +element ui

本文发布于:2024-03-23 15:25:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739759.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:上传   spring   java   ui   element

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!