最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

环球新动态:学习笔记——SpringMVC文件上传与下载

来源:博客园

2023-01-21

一、文件下载


【资料图】

1、实现文件下载步骤

(1)准备文件下载相关步骤

(2)将ResponseEntity对象,作为方法返回值

(3)为ResponseEntity对象,设置三个参数

2、示例代码

@RequestMapping("/fileDownloadController")    public ResponseEntity fileDownload(HttpServletRequest request,String filename){        ResponseEntity responseEntity = null;        try {            //获取文件位置            //获取文件真实路径【(request|session)->ServletContext】            String realPath = request.getServletContext().getRealPath("/WEB-INF/download/" + filename);            //输入流            InputStream is = new FileInputStream(realPath);            //文件下载            byte[] bytes = new byte[is.available()];            is.read(bytes);            //设置响应头            HttpHeaders headers = new HttpHeaders();            //设置要下载的文件的名字(及文件格式为附件格式,通知服务器下载当前资源,而不是打开)            headers.add("Content-Disposition","attachment;filename");            //处理中文文件名问题            headers.setContentDispositionFormData("attachment",new String(filename));            //状态码            responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);            is.close();        } catch (Exception e) {            e.printStackTrace();        }        return responseEntity;    }

二、文件上传

1、实现文件上传思路

(1)准备工作

①准备文件上传页面

表单的提交方式必须为POST

设置表单enctype属性值为multipart/form-data

表单中包含文件域(type=file)

②导入jar包

    commons-fileupload    commons-fileupload    1.4

③装配解析器:CommonsMultipartResolver

                        

(2)实现步骤

①将type=file(文件域)直接入参:MultipartFile类型即可

②获取文件名称

@Controllerpublic class FileUploadController {    @RequestMapping("/fileUploadController")    public String fileUploadController(String username,                                       MultipartFile updateFile,                                       HttpSession session){        try {            //获取文件名称            String filename = updateFile.getOriginalFilename();            //获取上传路径            String realPath = session.getServletContext().getRealPath("/WEB-INF/upload");            //判断上传路径是否存在(如不存在,创建)            File filePath = new File(realPath);            if(!filePath.exists()){                filePath.mkdirs();            }            //实现文件上传            //File.separator:是系统默认的分隔符            File uFile = new File(filePath+File.separator+filename);            updateFile.transferTo(uFile);        } catch (IOException e) {            e.printStackTrace();        }        return "success";    }}

三、文件上传优化

1、允许同名文件上传

(1)使用UUID解决文件名重复问题

UUID是一个32位16进制随机数(特点:唯一性)

//实现文件上传            //解决重复文件名上传的方式            String uuid = UUID.randomUUID().toString().replace("-", "");            //File.separator:是系统默认的分隔符            File uFile = new File(filePath+File.separator+uuid+filename);

(2)使用时间戳解决文件名重复问题

System.currentTimeMillis()

2、设置上传文件大小上限

在装配CommonsMultipartResolver时,设置上传文件的上限

                        

关键词: 文件上传 文件下载 文件名称