package com.itheima.controller;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.URLEncoder;
import java.util.UUID;
/**
* 文件管理控制类
*/
@Controller
public class FileController {
// 向文件上传页面跳转
@GetMapping("/toUpload")
public String toUpload(){
return "upload";
}
// 文件上传管理
@PostMapping("/uploadFile")
public String uploadFile(MultipartFile[] fileUpload, Model model) {
// 默认文件上传成功,并返回状态信息
model.addAttribute("uploadStatus", "上传成功!");
for (MultipartFile file : fileUpload) {
// 获取文件名以及后缀名
String fileName = file.getOriginalFilename();
// 重新生成文件名(根据具体情况生成对应文件名)
fileName = UUID.randomUUID()+"_"+fileName;
// 指定上传文件本地存储目录,不存在需要提前创建
String dirPath = "F:/file/";
File filePath = new File(dirPath);
if(!filePath.exists()){
filePath.mkdirs();
}
try {
file.transferTo(new File(dirPath+fileName));
} catch (Exception e) {
e.printStackTrace();
// 上传失败,返回失败信息
model.addAttribute("uploadStatus","上传失败: "+e.getMessage());
}
}
// 携带上传状态信息回调到文件上传页面
return "upload";
}
// 向文件下载页面跳转
@GetMapping("/toDownload")
public String toDownload(){
return "download";
}
// // 文件下载管理
// @GetMapping("/download")
// public ResponseEntity<byte[]> fileDownload(String filename){
// // 指定要下载的文件根路径
// String dirPath = "F:/file/";
// // 创建该文件对象
// File file = new File(dirPath + File.separator + filename);
// // 设置响应头
// HttpHeaders headers = new HttpHeaders();
// // 通知浏览器以下载方式打开
// headers.setContentDispositionFormData("attachment",filename);
// // 定义以流的形式下载返回文件数据
// headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// try {
// return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
// } catch (Exception e) {
// e.printStackTrace();
// return new ResponseEntity<byte[]>(e.getMessage().getBytes(),HttpStatus.EXPECTATION_FAILED);
// }
// }
// 所有类型文件下载管理
@GetMapping("/download")
public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,
String filename) throws Exception{
// 指定要下载的文件根路径
String dirPath = "F:/file/";
// 创建该文件对象
File file = new File(dirPath + File.separator + filename);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
// 通知浏览器以下载方式打开(下载前对文件名进行转码)
filename=getFilename(request,filename);
headers.setContentDispositionFormData("attachment",filename);
// 定义以流的形式下载返回文件数据
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
try {
return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity<byte[]>(e.getMessage().getBytes(),HttpStatus.EXPECTATION_FAILED);
}
}
// 根据浏览器的不同进行编码设置,返回编码后的文件名
private String getFilename(HttpServletRequest request, String filename)
throws Exception {
// IE不同版本User-Agent中出现的关键词
String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
// 获取请求头代理信息
String userAgent = request.getHeader("User-Agent");
for (String keyWord : IEBrowserKeyWords) {
if (userAgent.contains(keyWord)) {
//IE内核浏览器,统一为UTF-8编码显示,并对转换的+进行更正
return URLEncoder.encode(filename, "UTF-8").replace("+"," ");
}
}
//火狐等其它浏览器统一为ISO-8859-1编码显示
return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,07是第七章
资源推荐
资源详情
资源评论
收起资源包目录
冷飞老师Springboot实验代码 ,01是第一章第二章 ,02是第三章 ,03是第四章 ,05是第五章 ,06是第六章 ,0 (151个子文件)
application.properties.bak 233B
application.yaml.bak 180B
mvnw.cmd 7KB
mvnw.cmd 7KB
mvnw.cmd 7KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
bootstrap.min.css 185KB
bootstrap.min.css 141KB
bootstrap.min.css 141KB
signin.css 971B
signin.css 906B
signin.css 906B
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 303B
.gitignore 277B
.gitignore 277B
upload.html 1KB
login.html 1KB
login.html 1KB
login.html 1KB
index.html 1KB
2.html 849B
1.html 722B
1.html 656B
2.html 589B
download.html 573B
csrfTest.html 567B
demo1.html 123B
maven-wrapper.jar 59KB
maven-wrapper.jar 59KB
maven-wrapper.jar 47KB
maven-wrapper.jar 47KB
maven-wrapper.jar 47KB
FileController.java 5KB
MavenWrapperDownloader.java 5KB
MavenWrapperDownloader.java 5KB
MavenWrapperDownloader.java 5KB
SecurityConfig.java 4KB
RedisConfig.java 4KB
RedisConfig.java 3KB
FilmeController.java 3KB
MyInterceptor.java 2KB
Person.java 2KB
ApiCommentService.java 2KB
MyLocalResovel.java 2KB
CustomerService.java 2KB
MyLocalResovel.java 2KB
SpringBootApplicationTests.java 2KB
Person.java 2KB
JpaTests.java 2KB
RedisTests.java 2KB
DiscussRepository.java 2KB
UserDetailsServiceImpl.java 2KB
CommentService.java 1KB
Comment.java 1KB
ApiCommentController.java 1KB
MyMVCconfig.java 1KB
CommentController.java 1KB
Discuss.java 1KB
MyProperties.java 1KB
ServletConfig.java 1KB
MybatisTests.java 1KB
Article.java 1KB
CSRFController.java 990B
Comment.java 948B
Customer.java 915B
Chapter05Application.java 904B
MyFilter.java 854B
Authority.java 817B
Family.java 809B
Address.java 801B
MyServlet.java 796B
MyListener.java 681B
LoginController.java 679B
PersonRepository.java 627B
CommentMapper.java 607B
CommentRepository.java 602B
LoginController.java 601B
StartApplication.java 544B
AuthorityRepository.java 543B
Pet.java 536B
Chapter06ApplicationTests.java 526B
HelloController.java 490B
Chapter06Application.java 453B
MyConfig.java 432B
ProdDBConnector.java 418B
TestDBConnector.java 418B
DevDBConnector.java 416B
Springboot02DataAccessApplication.java 342B
Chapter07ApplicationTests.java 341B
Chapter05ApplicationTests.java 340B
SpringBoot03ViewApplication.java 330B
Chapter07Application.java 322B
CustomerRepository.java 259B
ArticleMapper.java 223B
SpringBoot03ViewApplicationTests.java 216B
共 151 条
- 1
- 2
资源评论
Tony小周
- 粉丝: 2723
- 资源: 96
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 根据网易云生成lrc,支持双语言.zip
- 实验箱介绍,具体的等我介绍就好,先看了解个大概
- 根据OC版本借贷类型APP、使用swift语言重写一套部分功能简易类型APP.zip
- 新能源汽车+电气规范和测试标准+B级电压系统和零部件+ISO 21498-2-2021
- 极简 go Language ctp 交易引擎.zip
- 本项目是用GO语言实现的网易云信的服务端API封装.zip
- 本项目是三大自然语言处理课程项目,基于seq2seq模型,实现简单的对话机器人效果 .zip
- C#毕业设计-基于ASP.NET的教师公寓管理系统源码.zip
- 本库将会整理我在学习go语言过程中在阅读好文,博客,开源项目代码时遇到的好的易于复用的并发模式代码.zip
- 完全原创,百分百能用 用于下载深度学习医学数据集MedShapeNet的数据集,不依赖openssl,如果你openssl下载不了可以用我这个
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功