2025年niua框架的上传实现的学习记录

niua框架的上传实现的学习记录前言 简述 niua 框架的上传功能的实现 niua 框架的上传接口介绍 前端组件调用接口并实现上传操作 niua 框架的上传接口 niua 框架是基于 mybatis plus 搭建的一个轻量级框架 集合了上传以及代码生成等功能 上传接口定义在在 niua 框架的 common 中 文件树结构如下

大家好,我是讯享网,很高兴认识大家。

前言

简述niua框架的上传功能的实现

  • niua框架的上传接口介绍
  • 前端组件调用接口并实现上传操作

niua框架的上传接口

niua框架是基于mybatis-plus搭建的一个轻量级框架,集合了上传以及代码生成等功能

上传接口定义在在niua框架的common中,文件树结构如下,controller层中定义了接口方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

接口代码

 @PostMapping("/upload") public ResultJson uploadFile(MultipartFile file) throws Exception { try { // 上传文件路径 String filePath = NiuaConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; Map<String, String> prams = new HashMap<String, String>(); prams.put("fileName", fileName); prams.put("url", url); return ResultJson.ok(prams); } catch (Exception e) { return ResultJson.failure(ResultCode.BAD_REQUEST, e.getMessage()); } } 
讯享网

1.获取本地文件上传路径

讯享网String filePath = NiuaConfig.getUploadPath(); 

上传路径变量在配置实体类中,而实际的赋值,在admin–>resources–>application-local.yml 本地配置文件中。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

2.上传文件并返回新的文件名称

 String fileName = FileUploadUtils.upload(filePath, file); 

调用FileUploadUtils的上传方法,进行文件名称长度判断,大小检验以及重新命名并返回文件名

封装的上传方法

讯享网/ * 根据文件路径上传 * * @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); } } 

封装中调用的upload方法

/ * 文件上传 * * @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; } 
int fileNamelength = file.getOriginalFilename().length(); if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); } 

进行上传文件的文件名称检验,是否小于预定的大小

 assertAllowed(file, allowedExtension); //方法的源码如下 / * 文件大小校验 * * @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); } } } 

进行文件大小的检验

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

编辑文件名,根据时间在本地上传目录下创建文件夹,并随机生成ID加后缀为上传文件的名。

 File desc = getAbsoluteFile(baseDir, fileName); // getAbsoluteFile方法 / * * @param uploadDir 上传的文件父级目录 * @param fileName 重新编码后上传的文件名 * @return * @throws IOException */ 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; } 

判断文件上级目录是否存在,如果存在则直接在此下创建文件,若父级目录不存在则先创建父级目录再创建文件

file.transferTo(desc); 

直接写入文件

 String pathFileName = getPathFileName(baseDir, fileName); //getPathFileName方法 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; } 

获得文件的存储路径

拼接url并以JSON格式返回 fileName以及url

 String url = serverConfig.getUrl() + fileName; Map<String, String> prams = new HashMap<String, String>(); prams.put("fileName", fileName); prams.put("url", url); return ResultJson.ok(prams); 

上传组件调用接口

 <el-upload drag :action="uploadImgUrl" :on-success="handleUploadSuccess" # 上传成功后触发的事件 :before-upload="handleBeforeUpload" # 上传前触发的事件,通常是进行文件限制 :on-error="handleUploadError" # 上传失败触发的事件 name="file" :show-file-list="false" :headers="headers" # niua框架的请求头, > 

借用了element ui 的组件,将上面的接口调用url赋值给uploadImgUrl

 uploadImgUrl: { type:String, default: "/v1/admin/common/upload", // 上传的图片服务器地址 } 

headers的获取

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

总结

ImgUrl

 uploadImgUrl: { type:String, default: "/v1/admin/common/upload", // 上传的图片服务器地址 } 

headers的获取

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

总结

本文,记录了我在学习element ui组件实现上传时涉及到的niua框架的一些上传功能基础。讲述了如何调用niua框架的上传接口,以及上传接口是如何实现的。希望有所帮助。

小讯
上一篇 2025-01-29 11:45
下一篇 2025-03-09 12:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36501.html