SpringMVC(五)实现文件上传

news/2025/1/8 16:14:29/

目录

1.先导jar包

 2.在Springmvc.xml配置文件上传解析器

3. 编写文件上传的html页面

 4.在controller包中创建FileController.class文件

5.文件下载 

6.重启服务器测试


 1.先导jar包

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version>
</dependency>
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
</dependency>

将上述jar包放进pom.xml中:

 2.在Springmvc.xml配置文件上传解析器

 <!--配置文件上传的解析器组件。id的名称是固定,不能乱写--><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--设置上传文件的总大小 8M = 8 * 1024 * 1024 --><property name="maxUploadSize" value="8388608" /><!--这里的value里面放的值是上传文件的大小上限-可以自行更改--></bean>

如下:

3. 编写文件上传的html页面

直接用index.html界面吧:
将这一段body内容放进去:

<h3>文件上传</h3><form id="addForm"  action="/改成和自己的项目名称相对应/file/upload" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="file" width="120px"><input type="submit" value="上传">
</form><div id="upMenu" class="white_content"><form id="downForm"   lay-filter="updata" action="/改成和自己的项目名称相对应/file/down" method="get"><input type="text" id="filename" name="filename"><input type="submit" value="下载"></form><input type="button" value="完成"/>
</div>

即:

注意:这里指的是一级路径(controller层)

 

 4.在controller包中创建FileController.class文件

java">package controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;@Controller
@RequestMapping("/file")
public class FileController {/*** 文件上传功能* @param file* @return* @throws IOException*/@RequestMapping(value="/upload",method= RequestMethod.POST)@ResponseBody//这里入参的注解是为了明确参数来源,如果没有这个注解,Spring MVC 可能无法正确地将请求中的文件参数映射到方法参数file//@RequestParam("file")用于指定一个名为file的请求参数,并将其绑定到MultipartFile类型的file参数上public  String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {// uploads文件夹位置String rootPath = request.getSession().getServletContext().getRealPath("WEB-INF/upload");//这里表示上传的位置(目前是没有的,需要去建一下)// 原始名称String originalFileName = file.getOriginalFilename();// 新文件File newFile = new File(rootPath + File.separator  + File.separator + originalFileName);// 判断目标文件所在目录是否存在if( !newFile.getParentFile().exists()) {// 如果目标文件所在的目录不存在,则创建父目录newFile.getParentFile().mkdirs();}System.out.println(newFile);// 将内存中的数据写入磁盘file.transferTo(newFile);return  "{\"data\":\"success\"}";//这里是拼出来的json数据,本质还是字符串}}

注意这里,需要去WEB-INF里面创建一下(选这里是为了方便,完全可以填其他的C:或D:盘下的某个路径):

 当然就算不手动创建,代码中也会给我们自行创建:

上面就实现了文件的上传,现在来加上文件的下载功能:

5.文件下载 

加到FileController.class文件中:

java"> /*** 文件下载功能* @param request* @param response* @throws Exception*/@RequestMapping("/down")public void down(HttpServletRequest request, HttpServletResponse response) throws Exception{//手动去搜索一下名字,因为这里并没有实现前端页面String filename = request.getParameter("filename");System.out.println(filename);//模拟文件,myfile.txt为需要下载的文件String fileName = request.getSession().getServletContext().getRealPath("WEB-INF/upload")+"/"+filename;//获取输入流InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName)));//假如以中文名下载的话// String filename = "下载文件.txt";//转码,免得文件名中文乱码filename = URLEncoder.encode(filename,"UTF-8");//设置文件下载头response.addHeader("Content-Disposition", "attachment;filename=" + filename);//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setContentType("multipart/form-data");BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());int len = 0;while((len = bis.read()) != -1){out.write(len);out.flush();}out.close();}

6.重启服务器测试

运行后显示界面,点击选择文件,随机选择一个小于8M的文件(代码中手动设置的上传上限)打开上传:

 提示上传成功:

现在去看 idea中运行完成后打印的内容(获取文件名):

现在拿着这个名字去下载:

 

点击下载后,这里就会下载成功:

  

通过这种底层逻辑,能够实现小型 的文件管理


http://www.ppmy.cn/news/1560530.html

相关文章

solr9.7 单机安装教程

1.环境要求:jdk11以上 2.下载wget https://dlcdn.apache.org/solr/solr/9.7.0/solr-9.7.0.tgz 3.解压 4.修改solr.in.sh配置 5.启动命令 bin/solr start 6.创建core bin/solr create -c <core名称> 注意:用solr ui界面创建&#xff0c;会提示找不到solrconfig.xml和m…

美畅物联丨视频上云网关获取视频流地址供第三方调用的方法

在视频监控与流媒体传输领域&#xff0c;视频流地址的获取与调用是极为关键的环节。视频上云网关作为一款高效且稳定的视频传输设备&#xff0c;为获取视频流地址提供了便捷途径&#xff0c;从而使外部系统或平台能够方便地进行调用。今天我们就来讨论一下如何在视频上云网关上…

目录中只有一个子目录时把子目录移动到父目录

直接上代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

CodeFuse IDE 0.7 版本发布,支持 Lint Error 智能改写

CodeFuse IDE 是一款基于蚂蚁自研大模型 CodeFuse 和自研 IDE 框架 OpenSumi 开发的 AI IDE&#xff0c;它支持主流的编程语言&#xff0c;在开发过程中提供单行代码或整个函数的编写建议&#xff0c;此外还支持代码解释、单测生成、问题修复、智能终端等功能&#xff0c;提升开…

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net asm基础语法 1. 环境配置 xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3.在cmd中输入ml&#xff0c;可以识别即配置成功 dosbox…

MAC录屏QuikTimePlayer工具录屏声音小免费解决方案

一、安装驱动&#xff1a; https://www.filmagepro.com/zh-cn/help/how-to-record-audio-with-filmage-screen 驱动链接&#xff1a; https://www.filmagepro.com/downloads/FilmageAudioDevice.pkg 二、录屏麦克风切换为&#xff1a;Filmage Audio Device

node-js Express防盗链

什么是防盗连 一个简单的说明&#xff0c;假如在前端img标签想要引用图片网站上的图片&#xff0c;当你将图片地址放到img标签上想要显示的时候你发现&#xff0c;图片显示不了&#xff0c;这说明网站采用了防盗链。 怎么实现的呢 在请求头中一般会有 Referer&#xff0c;它…

【商业化】【微软商店】微软打包时报找不到img/logo.ico

【背景】 发现用pyinstaller打包后的python项目并不维持原有的文件夹结构,而是将所有资源都放到一个叫_internal的文件夹下,导致inno setup生成安装程序后找不到原本主目录下的img/logo.ico。我采用的解决办法就是将_internal文件夹下的img文件夹拷贝一份到主目录再用inno s…