9.SpringMVC-下载和上传的实现
本文最后更新于2024.04.28-07:44
,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥。
下载的实现
1.直接使用 a标签 并在超链接里 写入要下载的资源的路径
弊端:
1.需要配置 静态资源访问 否则会被SpringMVC 前端控制器拦截到
2.会暴露 项目的资源的路径
3.没有办法进行业务判断,比如是否有权限下载。
2.思路:
1.获取到要下载的文件的 绝对路径。
2.获取 对该文件的 输出流,和利用response对象获取到 输出流。
3.设置响应头
5.关闭输入流。
@RequestMapping("download1")
public String download01(HttpServletRequest request, HttpServletResponse response) throws IOException {
//获取绝对路径
String path = request.getServletContext().getRealPath("file");
System.out.println(path);
//获取该路径对应的 file对象
File file = new File(path+"/"+"美美哒.jpg");
//获取输入流,用于读上述对象
FileInputStream fis = new FileInputStream(file);
//获取输出流,用于写回客户端
OutputStream outputStream = response.getOutputStream();
//设置响应头的格式,确保文件是被下载而不是被浏览器直接打开
response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(file.getName(),"UTF-8"));
//io读写
byte[] bytes = new byte[1024];
int num = 0;
while((num=fis.read(bytes))!=-1){
outputStream.write(bytes,0,num);
}
//关闭输入流,输出流不需要我们处理
fis.close();
return null;
}
3.利用 ResponseEntity<byte[]> 进行下载
不推荐(当下载文件过大时,由于无法使用缓冲区,可能会导致内存溢出)
@RequestMapping("download2")
public ResponseEntity<byte[]> download02(HttpServletRequest request) throws IOException {
String path = request.getServletContext().getRealPath("file");
File file = new File(path+"/"+"美美哒.jpg");
InputStream ins = new FileInputStream(file);
int length = ins.available();
byte[] bytes = new byte[length];
ins.read(bytes);
HttpHeaders header = new HttpHeaders();
header.add("content-disposition","attachment;filename="+ URLEncoder.encode(file.getName(),"UTF-8"));
return new ResponseEntity<byte[]>(bytes,header, HttpStatus.OK);
}
上传的实现
1.导入 commons-fileuploadjar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2.在spring-mvc.xml里配置 上传解析器
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!-- 设置编码格式 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设置上传文件的 最大文件大小 -->
<property name="maxUploadSize" value="#{2*1024*1024}"></property>
</bean>
3.上传的表单 修改 enctype为 multipart/form-data
4.后端的控制器中使用 MutlpartFile 接受上传的文件
@Controller
public class UploadController {
@RequestMapping("uploadUser")
//使用MultiPartFile 对象来接受 上传的文件
//MultipartFile[] userImg 用于多文件上传
public String userRegister(User user, MultipartFile[] userImg) throws IOException {
// System.out.println(user);
// System.out.println(userImg);
// //获取上传的文件的 表单组建的name属性
// System.out.println(userImg.getName());
// //获取 上传文件的 文件类型 真实类型 和文件名无关
// System.out.println(userImg.getContentType());
// //获取文件大小 单位字节
// System.out.println(userImg.getSize());
// //获取上传文件的 真实文件名
// System.out.println(userImg.getOriginalFilename());
// File file = new File("c:/userImages/"+userImg.getOriginalFilename());
//复制文件 到指定的file对象
// userImg.transferTo(file);
for(MultipartFile mf:userImg){
File file = new File("c:/userImages/"+mf.getOriginalFilename());
mf.transferTo(file);
}
return null;
}
}
小练习
做一个 注册页,注册也 输入用户名 密码 性别 头像(上传) 个人简历(word)
注册成功后 跳转到 用户信息页面
显示欢迎....用户 显示用户头像
在下面 下载个人简历
阅读剩余
版权声明:
作者:涛哥
链接:https://ltbk.net/back/spring_family/springmvc/article/909.html
文章版权归作者所有,未经允许请勿转载。
作者:涛哥
链接:https://ltbk.net/back/spring_family/springmvc/article/909.html
文章版权归作者所有,未经允许请勿转载。
THE END