“文件的上传与下载:实现与优化“

简介: “文件的上传与下载:实现与优化“

引言

在开发过程中,文件的上传与下载是常见的需求。本篇博客将以CSND为例,介绍文件上传与下载的常见方式,以及如何通过优化提升性能和用户体验。

1.文件的上传

  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
  1. 文件上传
@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
  1. resource.properties 配置
dir= D:/Course/temp/images/
server=/images/
• 1
• 2

2.文件的下载

  1. 常规下载方式
    提供直接下载链接,用户点击链接即可下载文件。
    设置合适的下载文件名和MIME类型。
    控制权限,只允许有权限的用户下载。
  2. 异步下载
@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工具的简介以及如何批量下载图片。通过学习和应用这些方法,可以更好地满足开发需求并提升开发效率。


相关文章
|
8月前
|
前端开发 JavaScript Java
文件在线压缩与解压系统
文件在线压缩与解压系统
100 0
|
8月前
使用 responseentity进行文件的下载
使用 responseentity进行文件的下载
233 0
|
机器人 Python
在阿里云RPA中,获取下载的文件
在阿里云RPA中,获取下载的文件
374 2
|
编解码 Java 应用服务中间件
文件的上传和下载
文件的上传和下载
100 0
|
前端开发 网络协议 API
大文件处理(上传,下载)思考
在计算文件hash的方式,主要有以下几种: 分片全量计算hash、抽样计算hash。在这两种方式上,分别又可以使用web-work和浏览器空闲(requestIdleCallback)来实现.
大文件处理(上传,下载)思考
html+css实战35-上传多个文件功能
html+css实战35-上传多个文件功能
130 0
html+css实战35-上传多个文件功能
|
缓存 Java 程序员
java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72772502 一、前言   程序员在做web等项目的时候,往往都需要添加文件上传、下载、删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计的时候就会事半功倍 了,那么接下来的博客将会介绍各个框架的文件上传和下载功能的使用方法。
4033 0
|
存储 Apache 安全
文件的上传和下载学习小结
文件的上传和下载学习小结 一、文件上传 客户端通过浏览器将文件上传至服务器。 对于我们写代码来说,就是IO操作。 二、实现文件上传 对表单有什么要求? 1. 提交方式必须为post 2. enctype="multipart/form-data" 3. 对于服务器的servlet有什么要求? request.getParameter("name"); 不能用该方式获取表单数据了,若非要用,则返回null。
1253 0
|
Web App开发 存储 Java
day18_文件的上传和下载学习笔记
一、文件的上传和下载 1、文件上传的原理分析 什么是文件上传?    要将客户端(浏览器)数据存储到服务器端,而不将数据直接存储到数据库中,而是要将数据存储到服务器所在的磁盘上,这就要使用文件上传。
1242 0

热门文章

最新文章

下一篇
开通oss服务