web文件上传

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

前端需求

想要进行文件上传对于web前端来说有三个重要要素

1. 提供这样的file文件上传格式
2. method="post" 由于上传文件一般比较大,所以上传格式采用post类型
3. enctype="multipart/form-data" 设置文件编码格式,如果不选这个提交的就是文件名

action="/upload"表示提交的位置

    <form action="/upload" method="post" enctype="multipart/form-data">
        姓名: <input type="text" name="username"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="image"><br>
        <input type="submit" value="提交">
    form>

后端代码

  1. HTML中的name应该要与public Result upload()中的形参名称一一对应,如果没有对应记得进行映射。
  2. MultipartFile img用于图像对象
package com.ztt.controller;

import com.ztt.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile img)
    {
        log.info("文件上传:{}{}{}",username,age,img);
        return Result.success();
    }
}

本地存储

服务端接收到上传的文件后,将文件保存到本地的磁盘目录上。

@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws Exception
    {
        log.info("文件上传:{}{}{}",username,age,image);

        // 获取文件名称
        String originalFilename = image.getOriginalFilename();
        // 将文件存储在本地服务器的磁盘目录下
        image.transferTo(new File("D:\\images\\"+originalFilename));
        return Result.success();
    }
}

注意,本地存储的路径一定要事先准备好,否则会保存

java.io.IOException: java.io.FileNotFoundException: D:\images[3].jpg (系统找不到指定的路径。)

测试的话使用POSTMAN就可以,使用post发送,选择File文件发送即可。
web文件上传_第1张图片

在springboot中,文件上传单次允许最大为1MB。如果需要进行大文件上传,需要进行配置。

在resources中的application.properties中进行配置。
web文件上传_第2张图片

# 单个文件上传限制
spring.servlet.multipart.max-file-size=10MB

# 单个请求最大限制
spring.servlet.multipart.max-request-size=100MB

保证文件名唯一性

如果存储在同一路径下,可能导致服务器路径重复或名称重复导致文件被覆盖。为解决这个问题,我们一般采用UUID的方法。

String originalFilename = image.getOriginalFilename();
// 将文件存储在本地服务器的磁盘目录下
// 获取文件扩展名
int index = originalFilename.lastIndexOf(".");
String exname = originalFilename.substring(index);

String newFileName = UUID.randomUUID() + exname;
// 构造文件唯一性(不能重复) 适应 --uuid(通用唯一识别码)

阿里云OSS

web文件上传_第3张图片
java引入依赖


<dependency>
    <groupId>com.aliyun.ossgroupId>
    <artifactId>aliyun-sdk-ossartifactId>
    <version>3.15.1version>
dependency>

java 9 以上的版本还需要引入下面的依赖

<dependency>
    <groupId>javax.xml.bindgroupId>
    <artifactId>jaxb-apiartifactId>
    <version>2.3.1version>
dependency>
<dependency>
    <groupId>javax.activationgroupId>
    <artifactId>activationartifactId>
    <version>1.1.1version>
dependency>

<dependency>
    <groupId>org.glassfish.jaxbgroupId>
    <artifactId>jaxb-runtimeartifactId>
    <version>2.3.3version>
dependency>

你可能感兴趣的:(JAVA后端,前端)