SpringtBoot实现文件上传

SpringtBoot实现文件上传

一.前言

我们这一篇文章主要来讲解如何用SpringBoot实现文件上传,在此之前我们需要了解一些知识点。

1.1.MultipartFile类

org.springframework.web.multipart.MultipartFile类主要是用表单的形式进行文件上传,在接收到文件时,可以获取文件的相关属性,比如文件类型、文件大小、文件名等等。

常用的方法:

  1. String getOriginalFilename():获取文件的完整名称,文件名+后缀名。
  2. String getName():文件传参的参数名称。
  3. long getSize():文件大小,单位:字节。
  4. String getContentType():获取文件类型,并非文件后缀名。
  5. void transferTo(File dest):把内存中File类对象信息写入磁盘

1.2.File类

java.io.File类是文件和目录路径名称的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

常用方法:

  1. public File(String pathname):通过将给定的路径名(字符串)转换为抽象类路径来创建新的实例。
  2. public File(File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例。
  3. public boolean exists():此File标识的文件或目录是否实际存在。
  4. public boolean mkdirs():创建由File表示的目录,包括任何必须但不存在的父目录。
  5. public File getParentFile():获取父文件或文件夹

二.代码实现

2.1.导入依赖

首先我们导入项目所需的依赖。

        <!--糊涂工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.11</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2.2.创建服务层

我依次创建文件的上传的服务层接口和其实现类。

接口

package com.temperature.humidity.system.common.utils.test.upload.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

public interface UploadService {

    String coversUpload(MultipartFile file, String dataPath) throws IOException;
    
}

实现类

package com.temperature.humidity.system.common.utils.test.upload.service.impl;

import cn.hutool.core.util.IdUtil;
import com.temperature.humidity.system.common.utils.test.upload.service.UploadService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class UploadServiceImpl implements UploadService {
    /**
     * 文件上传
     *
     * @param file     前端传入的文件
     * @param dataPath 存放文件的文件夹路径
     */
    @Override
    public String coversUpload(MultipartFile file, String dataPath) throws IOException {
        //通过将给定的路径名(dataPath)转换为抽象类路径来创建新的实例。
        File imageFolder = new File(dataPath);
        //获取文件后缀名
        String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //上传文件名生成规则-UUID前六位+文件后缀名
        String newFileName = IdUtil.simpleUUID().substring(0, 6) + fileSuffix;
        //从父抽象路径名和子路径名字符串创建新的File实例
        File newFile = new File(imageFolder, newFileName);
        //判断父路径是否存在,如果不存在则新建。
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdirs();
        }
        //把内存中File类对象信息写入磁盘
        file.transferTo(newFile);
        //返回文件路径
        return newFile.getPath();
    }

}

2.3.创建控制层

我们创建控制层用来接收前端传过来的文件和对应的上传路径。

package com.temperature.humidity.system.common.utils.test.upload.controller;

import com.temperature.humidity.system.common.utils.test.upload.service.UploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/api")
public class UploadController {

    @Autowired
    private UploadService uploadService;
    
    @RequestMapping("/upload")
    public String upload(MultipartFile file, String dataPath) throws IOException {
       return uploadService.coversUpload(file, dataPath);
    }
    
}

三.测试

3.1.Postman

首先我们打开Postman输入我们的接口和对应的传参类型。
在这里插入图片描述

3.2.查看文件

我们可以通过图3.1接口返回值这块可以看到我们将该文件上传到D盘的目录下,我们打开此目录,可以看到该文件如我们所想的,在这里。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值