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


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