JavaWeb学习(十四)

JavaWeb学习(十四):Web后端开发 —— 文件上传

本文为个人学习记录,内容学习自 黑马程序员


概述

  • 文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程

前端程序

  • 前端页面文件上传三要素:

    1. 定义 form 表单,表单中必须包含类型为 "file" 的表单项:<input type="file" name="xxx">

    2. 请求方式必须是 POST:method="post"

    3. 表单编码格式必须设置为 "multipart/form-data":enctype="multipart/form-data"

      如果表单编码格式为默认值,此时提交的内容仅仅是文件名,不包含文件内容;如果表单编码格式为 "multipart/form-data",那么提交的内容包括文件名、文件内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上传文件</title>
    </head>
    <body>
    
        <form action="/upload" method="post" enctype="multipart/form-data">
            头像: <input type="file" name="image"><br>
            <input type="submit" value="提交">
        </form>
    
    </body>
    </html>
    

后端程序

  • Spring 提供了 MultipartFile 这一 API 用于接收上传的文件

    // MultipartFile的形参名需要与表单项名称保持一致,才能自动封装
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        return Result.success();
    }
    
  • 对接收到的文件进行存储一般采用两种方法:本地存储、云存储

  • 本地存储:

    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        // 获取原始文件名
        String originalFilename = image.getOriginalFilename();
        
        // 构造唯一的文件名
        // 1.获取文件后缀(扩展名)
        int index = originalFilename.lastIndexOf(".");
        String extname = originalFilename.substring(index);
        // 2.获取新的、唯一的文件名(随机UUID+扩展名)
        String newFileName = UUID.randomUUID().toString() + extname;
        
        // 将文件存储在本地目录中
        image.transferTo(new File("C:\\Users\\PC\\Desktop\\" + newFileName));
        return Result.success();
    }
    

    本地存储缺点:1.无法直接访问 2.受限于磁盘空间 3.磁盘损坏风险

  • 阿里云OSS存储:

    • 阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务
    • 使用方法:阅读官方文档
  • 配置上传大小:

    在 SpringBoot 的文件上传中,默认单个文件允许的最大大小为 1MB,如果需要上传大文件,需要进行如下配置:

    # 配置单个文件最大上传大小为10MB
    spring.servlet.multipart.max-file-size=10MB
    # 配置单个请求最大上传文件大小为100MB
    spring.servlet.multipart.max-request-size=100MB
    
posted @ 2025-03-21 21:02  victoria6013  阅读(5)  评论(0)    收藏  举报