首页 > 其他分享 >10. 文件上传和下载

10. 文件上传和下载

时间:2023-06-21 11:35:25浏览次数:37  
标签:10 String 文件 photo ResponseEntity new 上传 下载

10.1、文件下载

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文

使用ResponseEntity实现下载文件的功能

@RequestMapping("/testDown")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws
    IOException {
    //获取ServletContext对象
    ServletContext servletContext = session.getServletContext();
    //获取服务器中文件的真实路径
    String realPath = servletContext.getRealPath("/static/img/1.jpg");
    //创建输入流
    InputStream is = new FileInputStream(realPath);
    //创建字节数组
    byte[] bytes = new byte[is.available()];
    //将流读到字节数组中
    is.read(bytes);
    //创建HttpHeaders对象设置响应头信息
    MultiValueMap<String, String> headers = new HttpHeaders();
    //设置要下载方式以及下载文件的名字
    headers.add("Content-Disposition", "attachment;filename=1.jpg");
    //设置响应状态码
    HttpStatus statusCode = HttpStatus.OK;
    //创建ResponseEntity对象
    ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers,statusCode);
    //关闭输入流
    is.close();
    return responseEntity;
}

10.2、文件上传

文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"

SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

上传步骤:

①添加依赖:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

②在SpringMVC的配置文件中添加配置:

<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

③控制器方法:

@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
    //获取上传的文件的文件名
    String fileName = photo.getOriginalFilename();
    //处理文件重名问题
    String hzName = fileName.substring(fileName.lastIndexOf("."));
    fileName = UUID.randomUUID().toString() + hzName;
    //获取服务器中photo目录的路径
    ServletContext servletContext = session.getServletContext();
    String photoPath = servletContext.getRealPath("photo");
    File file = new File(photoPath);
    if(!file.exists()){
        file.mkdir();
    }
    String finalPath = photoPath + File.separator + fileName;
    //实现上传功能
    photo.transferTo(new File(finalPath));
    return "success";
}

标签:10,String,文件,photo,ResponseEntity,new,上传,下载
From: https://www.cnblogs.com/NorthPoet/p/17495840.html

相关文章

  • 前端JS zip打包文件并下载,图片url转base64
    使用jszip这个项目实现的:https://github.com/Stuk/jszipFileSaver.js项目地址是:https://github.com/eligrey/FileSaver.js/<scriptsrc="./FileSaver.min.js"></script><scriptsrc="./jszip.min.js"></script>//初始化一个zip打包对象varzi......
  • 对imxrt 1050 flexspi 多设备的使用
    本文主要是对近期学习flexspi的一个大致总结对于imxrt1050系列,只提供了一个flexspi,而手册中说可接4个设备,听着很不错,但其实有个很大限制,必须是同时钟频率的。因为只有一个外设,其中的时钟配置也只有一个时钟配置。而且对于AHB和IP两种访问方式,同一时间只能一个有效,同时在wr......
  • 10个具体项目生动精彩讲述JavaScript;超级Web应用,构建不再困难
     “JavaScript,就是那种小时候长得很丑,长大了却谁都想要的孩子。”诞生初期,由于很多所谓的“资深”程序员的滥用,让这个孩子饱受质疑,直到前几年DOM技术开始崛起,JavaScript才逐渐恢复了曾经的兴盛。并且,这时的JavaScript更多了一份成熟,少了一缕稚气。JavaScript虽然已经被当......
  • 代码随想录算法训练营第十三天| 层序遍历 226.翻转二叉树 (优先掌握递归) 101. 对
    层序遍历注意:1,使用队列的形式,依次入队,同时对队列进行计数2,知道数目消失,才进行下一个队列代码:1vector<vector<int>>levelOrder(TreeNode*root)2{3vector<vector<int>>result;4if(root==NULL)returnresult;5queue<TreeNode*>selected;6......
  • 数据库信息速递 支持机器学习的10个数据库 (译)
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。以下数据库虽然方法和能力各不相同,但所有这些数据库都允许您在数据所在的地方构建机器学习模型。对于机器学习将代码保持在数据附......
  • UVA11090 Going in Cycle!!题解
    题目大意给定一个N个点M条边的带权有向图,求平均值最小的回路。解法看到这种题目,喜欢打暴力的我一下就想到:遍历整个图,找到每一个环,然后算出它们的平均值,最后比较出最小值。然而,呃...,会T飞...既然我们不能暴力找最小值,那还有什么别的办法吗?我们只需要输出一个最小值就行了,既然......
  • python编写下载小工具。下载YouTube视频
    确保下载环境pipinstallpytubefrompytubeimportYouTube#1.导入工具包。如果没有就下载\fromtqdmimporttqdm#2.定义下载函数defdownload_YouTube_video(url):try:yt=YouTube(url)#创建下载链接。这段代码使用提供url创建一个YouTube对象......
  • ABB ACS510变频器恒压供水昆仑通态直接通讯一拖二 ABB变频器恒压
    ABBACS510变频器恒压供水昆仑通态直接通讯一拖二ABB变频器恒压供水触摸屏通讯程序1.采用ABB变频器Acs510自带恒压供水功能;2.用昆仑通态触摸屏直接通讯变频器;3.变频器自身自带供水功能,省去plc,节约成本,稳定,可靠;4.里面含有大部分通讯协议,参数只需一键填入,避免变频器参数调试的......
  • CF1810G The Maximum Prefix
    经典套路。题意你将随机生成一个长度为\(k\)的数组\(a\),其中\(a_i\)有\(p_i\)概率为\(1\),否则为\(-1\)。定义其前缀和数组\(s_i=\sum\limits_{j=1}^{i}a_j,i\in[0,k]\)。如果前缀和数组的最大值为\(t(t\in[0,k])\)那么你将获得\(h_t\)的权值。给定数组......
  • 三菱FX5U系列PLC控制10轴设备成套资料打包三菱FX5U控制10轴伺服的设备成套电气图纸,PLC
    三菱FX5U系列PLC控制10轴设备成套资料打包三菱FX5U控制10轴伺服的设备成套电气图纸,PLC程序,触摸屏程序,原理图,电气元件布局图,运行视频,伺服参数设置,Bom清单,操作说明书。PLC程序带有详细注释,时间锁,通讯,产品多个版型可选,操作方便,设备已经投产,运行稳定。此套程序为一手资料,伺服走脉冲不......