JavaWeb学习(十四):Web后端开发 —— 文件上传
目录
- JavaWeb学习(十四):Web后端开发 —— 文件上传
- 概述
- 前端程序
- 后端程序
本文为个人学习记录,内容学习自 黑马程序员
概述
- 文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程
前端程序
-
前端页面文件上传三要素:
-
定义 form 表单,表单中必须包含类型为 "file" 的表单项:<input type="file" name="xxx">
-
请求方式必须是 POST:method="post"
-
表单编码格式必须设置为 "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