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

编程入门 行业动态 更新时间:2024-10-08 10:56:06

niua<a href=https://www.elefans.com/category/jswz/34/1770644.html style=框架的上传实现的学习记录"/>

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

前言

简述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框架的上传接口,以及上传接口是如何实现的。希望有所帮助。

更多推荐

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

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

发布评论

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

>www.elefans.com

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