引言
在开发过程中,文件的上传与下载是常见的需求。本篇博客将以CSND为例,介绍文件上传与下载的常见方式,以及如何通过优化提升性能和用户体验。
1.文件的上传
- 使用表单提交方式
<%-- Created by IntelliJ IDEA. User: yuanh Date: 2023/9/9 Time: 16:38 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/student/upload" method="post" enctype="multipart/form-data"> <label>编号:</label><input type="text" name="sid" readonly="readonly" value="${param.sid}"/><br/> <label>图片:</label><input type="file" name="photo"/><br/> <input type="submit" value="上传图片"/> </form> </body> </html> • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18 • 19 • 20
- 文件上传
@RequestMapping("/upload") public String upload(Student student,MultipartFile photo){ try { // D:\Course\temp\images String dir = PropertiesUtil.getValue("dir"); String server = PropertiesUtil.getValue("server"); String originalFilename = photo.getOriginalFilename(); FileUtils.copyInputStreamToFile(photo.getInputStream(),new File(dir+originalFilename)); student.setSname(server+originalFilename); studentBiz.updateByPrimaryKeySelective(student); } catch (IOException e) { e.printStackTrace(); } return "redirect:list"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18
- resource.properties 配置
dir= D:/Course/temp/images/ server=/images/ • 1 • 2
2.文件的下载
- 常规下载方式
提供直接下载链接,用户点击链接即可下载文件。
设置合适的下载文件名和MIME类型。
控制权限,只允许有权限的用户下载。 - 异步下载
@RequestMapping(value="/download") public ResponseEntity<byte[]> download(Student student, HttpServletRequest req){ try { //先根据文件id查询对应图片信息 Student stu = this.studentBiz.selectByPrimaryKey(student.getSid()); String diskPath = PropertiesUtil.getValue("dir"); String reqPath = PropertiesUtil.getValue("server"); String realPath = stu.getSname().replace(reqPath,diskPath); String fileName = realPath.substring(realPath.lastIndexOf("/")+1); //下载关键代码 File file=new File(realPath); HttpHeaders headers = new HttpHeaders();//http头信息 String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码 headers.setContentDispositionFormData("attachment", downloadFileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK); }catch (Exception e){ e.printStackTrace(); } return null; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18 • 19 • 20 • 21 • 22 • 23
JRebel是一个Java开发工具,可以实时更新Java代码而无需重新启动应用程序。
- 1.安装JRebel插件
- 2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)
- 3.启动JRebel,测试使用
- 4.设置jrebel离线
4. 文件批量上传
批量下载图片可以通过以下方式实现:
@RequestMapping("/uploads") public String uploads(HttpServletRequest req, Student student, MultipartFile[] files){ try { StringBuffer sb = new StringBuffer(); for (MultipartFile cfile : files) { //思路: //1) 将上传图片保存到服务器中的指定位置 String dir = PropertiesUtil.getValue("dir"); String server = PropertiesUtil.getValue("server"); String filename = cfile.getOriginalFilename(); FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename)); sb.append(filename).append(","); } System.out.println(sb.toString()); } catch (Exception e) { e.printStackTrace(); } return "redirect:list"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18 • 19 • 20
总结
本篇博客介绍了文件的上传与下载的常见方式,并通过优化手段提升性能和用户体验。同时,还介绍了JRebel工具的简介以及如何批量下载图片。通过学习和应用这些方法,可以更好地满足开发需求并提升开发效率。