文件上传--单个或多个文件上传
单个文件上传
第一种方法:
/*** * @param file 需要上传的文件* @param baseUrl 上传地址* @param uploadName 上传文件如果要更改文件名称,该字段为要更改的名称,不需要更改则该参数应为空字符串或null*/public static void upload(MultipartFile file,String baseUrl,String uploadName){// 1、获取文件的原始文件名, 通过原始文件名获取文件后缀 例如:abc.jpgString originalFilename = file.getOriginalFilename();//后缀文件类型。如:.txt .pngString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//文件前缀名称String prefixName = originalFilename.substring(0, originalFilename.lastIndexOf("."));// 2、使用UUID重新生成文件名,防止文件名称重复造成文件覆盖String fileName = "";if (StringUtils.isNotEmpty(uploadName)){fileName = uploadName + suffix;}else {fileName = originalFilename;}// 3、创建一个目录对象File dir = new File(baseUrl);//判断当前目录是否存在if (!dir.exists()) {boolean mkdirs = dir.mkdirs();if (!mkdirs) {throw new CommonException(CommonCode.FILE_UPDATE_ERROR);}}try {// 4、将临时文件转存到指定位置file.transferTo(new File(baseUrl+File.separator + fileName));} catch (IOException e) {e.printStackTrace();}}
第二种方法:
public void upload(@RequestParam("file")MultipartFile file ){try {// 1、获取文件的原始文件名, 通过原始文件名获取文件后缀 例如:abc.jpgString originalFilename = file.getOriginalFilename();//后缀文件类型。如:.txt .pngString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//文件前缀名称String prefixName = originalFilename.substring(0, originalFilename.lastIndexOf("."));//TODO 要上传的文件地址,应从配置文件或者数据库中读取。本地测试时可以写 :D:\\uploadFileString resultUrl = "";// 2、创建一个目录对象File dir = new File(resultUrl);//判断当前目录是否存在if (!dir.exists() || (!dir.isDirectory())) {dir.mkdirs();}//3、若文件已存在,重命名为历史文件File uploadFile = new File(resultUrl+ File.separator+ originalFilename);//数据入库if (uploadFile.exists()){String rename = "重命名后的名称";File renameFile = new File(resultUrl+File.separator+prefixName+"-"+rename+suffix);com.google.common.io.Files.copy(uploadFile,renameFile);}// 4、将临时文件转存到指定位置file.transferTo(uploadFile);}catch (Exception e){e.printStackTrace();}}
如果上述代码出现:com.google.common.io找不到
请在pom.xml文件中加入一下配置:
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>27.0-jre</version>
</dependency>
多个文件单个字段上传(就是多次调用单个文件上传):
/*** 多个文件单个字段上传:例如:file : [logo.jpg , name.txt]* @param files* @param baseUrl*/public static void uploadFiles(MultipartFile[] files,String baseUrl,String uploadName){for (MultipartFile file : files) {upload(file,baseUrl,uploadName);}}
多个文件多个字段上传:
在apifox中测试应该为:
/*** 多个文件多字段上传。例如: file1:logo.png , file2:name.txt* @param request*/public static void uploadFiles(MultipartHttpServletRequest request){CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());if (multipartResolver.isMultipart(request)){//上传多个文件,每个字段一个文件Iterator<String> fileNames = request.getFileNames();while (fileNames.hasNext()){//取得上传的文件String uploadName = fileNames.next();MultipartFile file = request.getFile(uploadName);if (file != null){String projectPath = request.getSession().getServletContext().getRealPath("/");String originalFilename = file.getOriginalFilename();String temFile = projectPath + System.currentTimeMillis() + "_" + originalFilename;File targetFile = new File(temFile);try {file.transferTo(targetFile);}catch (IOException e){e.printStackTrace();}}}}}
注意:
在调用多个文件多个字段的方法时如果出现java.lang.ClassNotFoundException: org.apache.commons.fileupload.disk.DiskFileItemFactory的解决方法:
如果出现以上错误,请在pom.xml中引入
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version>
</dependency>
文件上传--单个或多个文件上传相关推荐
- Linux两个网卡mac地址重复,ARP响应Linux服务器上的单个MAC地址,同一网络上有多个接口...
Linux服务器有2个活动网络接口: IF:eth1 IP:192.168.1.1/24 MAC:11:11:11:11:11:11 (1GbE) IF:eth2 IP:192.168.1.2/24 ...
- 批量将多个 PPT 幻灯片文件合并成单个 PPT 文件
概要:我们经常处理 PPT 幻灯片文件,有时候我们有很多个 PPT 幻灯片文件需要整理.最常见的需求就是我们需要批量的将多个 PPT 幻灯片文件合并成一个独立的 PPT 文件,这个时候该怎么办呢?如果 ...
- java struts2 excel上传_文件上传下载——通过struts的FormFile上传单个excel文件
通过struts的FormFile上传单个excel文件 思路: 1.通过struts的FormFile获取File(这个文件的路径是"客户端的选择的路径地址") 2.将客户端的文 ...
- Spring MVC文件上传示例教程 - 单个和多个文件
Spring MVC文件上传示例教程 - 单个和多个文件 文件上传是任何Web应用程序中非常常见的任务.我们之前已经看过如何在Servlet和Struts2文件上传中上传文件.今天我们将学习Sprin ...
- 第十一章:实现SpringBoot单个、多个文件的上传
在企业级项目开发过程中,上传文件是最常用到的功能.SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么出入.下面我们来创建一个SpringBoot项目完成单个. ...
- JS_单个或多个文件上传_不支持单独修改
A-From表单直接填写提交地址,不过干预: 1. 单文件上传 最简单的文件上传,是单文件上传,form标签中加入enctype="multipart/form-data",for ...
- part实现实现单个(上传图片和文件上传)
不用架包,但是需要添加一个注解. @MultipartConfig // 获取到上传的文件Part part = req.getPart("vimg");// 获取到文件名Stri ...
- Struts文件上传与下载详解 _上传多个文件
在上一篇中给大家列出的单个文件的上传,那么这一篇咱们讲讲上传多个文件改怎么作呢?由于过程和上传单个文件的类似,所以在这里不细说,相信大家都能看懂,看不懂的可以在评论区留言,我看到之后会及时回复的!! ...
- Struts文件上传与下载详解_上传单个文件
大家都知道Servlet上传文件的时候用的是commons-fileupload插件上传的,但是过程极其的麻烦,同样Struts2也有自带的文件上传,但是过程比Servlet里面的简单了不少,接下来请 ...
最新文章
- webpack 占位符_通过示例学习Webpack:占位符图像模糊
- Linux centos下项目环境搭建及版本部署
- bupt summer training for 16 #2 ——计算几何
- c语言函数打印零星,C语言零星笔记--(const、typedef)
- 事业单位招 计算机面试实践技能操作,2019山东事业单位卫生类招聘面试实践技能概论...
- html _ 提取html片段内的纯文本
- jsoup爬虫教程技巧_Jsoup V的幕后秘密:优化的技巧和窍门
- 初探EntityFramework——空Code First模型
- python3集合_Python3 集合
- bzoj 5094: 硬盘检测(概率)
- 原生体验挡不住!JavaScript开源跨平台框架NativeScript
- ubuntu操作系统之新手操作必看篇
- Assassin’s Creed(hdu4415,贪心)
- style.left不起作用的问题
- 豆瓣高分JAVA书籍,值得收藏
- python中format函数用法简书_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...
- 数据库表和表字段的命名规范
- 国产智能BI产品崛起,帆软Fine BI、瓴羊Quick BI等应该如何选择
- [Linux入门系列].1.2.VMWare WorkStation和VMPlayer的安装
- 三级等保备案去哪查_民贷天下通过国家信息安全等级保护三级备案
热门文章
- 协同办公“战役”,华为输了吗?
- iatf16949标准三大过程_IATF16949要求的过程、文件、记录汇总
- 解决报错:OSError: Failed to open file b‘D:\\\xe5\xad\xa6\xe4\xb9\xa0\\scipy-_7cm39vc‘(图文并茂版详细版!!)
- 使用BS4爬取智联招聘
- Javascript版开心农场
- 曲线数学NURBS之B样条曲线
- 【机器学习-斯坦福】学习笔记1 - 机器学习的动机与应用
- 国家计算机二级和省计算机二级的区别?
- 比 Navicat 还要好用,功能还很强大的数据库管理工具!
- 美团配送php,PHP对接美团配送接口遇到的坑