Создайте свой собственный фоновый фреймворк SpringBoot с нуля (16)

Spring Boot Java
Всем привет, в этой главе мы добавляем функцию загрузки нескольких файлов. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной по адресу mr_beany@163.com. Также попросите руководства великих богов, спасибо

В системе модуль загрузки файлов, безусловно, незаменим, например, загрузка аватара, отображение изображения карусели и т. д., поэтому в этой главе мы добавим функцию загрузки файлов.

Первый: добавить зависимость commons-fileupload

Откройте файл pom и добавьте

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.1</version>
</dependency>

Второе: добавить системные переменные

Откройте файл core→constant и добавьте путь сохранения файла.

//文件上传储存的地址
public static final String SAVEFILEPATH = "F://img";

Три: добавить ограничение на загрузку файлов

Создать ядро→конфигуратор→MultipartConfigurer.java

package com.example.demo.core.configurer;

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.MultipartConfigElement;

@Configuration
public class MultipartConfigurer {

    @Bean
    public MultipartConfigElement multipartConfigElement(){
        MultipartConfigFactory factory=new MultipartConfigFactory();
        factory.setMaxFileSize("10MB");
        factory.setMaxRequestSize("10MB");
        return factory.createMultipartConfig();
    }
}

Четвертое: создайте класс инструментов для загрузки файлов

Создать ядро ​​→ утилиты → UploadActionUtil.java

package com.example.demo.core.utils;

import com.example.demo.core.constant.ProjectConstant;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author 张瑶
 * 文件上传控制器
 */
public class UploadActionUtil {

   public static List<String> uploadFile(HttpServletRequest request) throws Exception {
      List<String> list = new ArrayList<>();
      CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
            request.getSession().getServletContext());
      if (multipartResolver.isMultipart(request)) {
         MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
         Iterator<String> iterator = multiRequest.getFileNames();
         while (iterator.hasNext()) {
            // 取得上传文件
            MultipartFile file = multiRequest.getFile(iterator.next());
            if (file != null) {
               // 取得当前上传文件的文件名称
               String myFileName = file.getOriginalFilename();
               // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
               if (myFileName.trim() != "") {
                  String fileTyps = myFileName.substring(myFileName.lastIndexOf("."));
                  // String tempName="demo"+fileTyps;
                  String tempName = UUID.randomUUID().toString() + fileTyps;
                  // 创建文件夹
                  String folderPath = ProjectConstant.SAVEFILEPATH + File.separator + folderName();
                  File fileFolder = new File(folderPath);
                  if (!fileFolder.exists() && !fileFolder.isDirectory()) {
                     fileFolder.mkdir();
                  }
                  File uploadFile = new File(folderPath + File.separator + tempName);
                  file.transferTo(uploadFile);
                  myFileName = folderName() + File.separator + tempName;
                  list.add(ProjectConstant.SAVEFILEPATH + "//" + myFileName);
               }
            }
         }
      }
      return list;
   }

   /**
    * 得年月日的文件夹名称
    * 
    * @return
    */
   public static String getCurrentFilderName()  throws Exception{
      Calendar now = Calendar.getInstance();
      return now.get(Calendar.YEAR) + "" + (now.get(Calendar.MONTH) + 1) + "" + now.get(Calendar.DAY_OF_MONTH);
   }

   /**
    * 创建文件夹
    * 
    * @param filderName
    */
   public static void createFilder(String filderName) throws Exception {
      File file = new File(filderName);
      // 如果文件夹不存在则创建
      if (!file.exists() && !file.isDirectory()) {
         file.mkdirs();
      }
   }

   /**
    * 文件扩展名
    * 
    * @param fileName
    * @return
    */
   public static String extFile(String fileName)  throws Exception{
      return fileName.substring(fileName.lastIndexOf("."));
   }

   /**
    * 当前日期当文件夹名
    * 
    * @return
    */
   public static String folderName() throws Exception {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      String str = sdf.format(new Date());
      return str;
   }
}

Пятое: создайте UploadFileController

package com.example.demo.controller;

import com.example.demo.core.ret.RetResponse;
import com.example.demo.core.ret.RetResult;
import com.example.demo.core.utils.UploadActionUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
@RequestMapping("/uploadFile")
public class UploadFileController {

    @PostMapping("/upload")
    public RetResult<List<String>> upload(HttpServletRequest httpServletRequest) throws Exception {
        List<String> list = UploadActionUtil.uploadFile(httpServletRequest);
        return RetResponse.makeOKRsp(list);
    }
}

Шесть: тест

открытый почтальон

Введите localhost:8080/uploadFile/upload

Примечание. Параметры запроса следующие.


Возвращаемое значение — путь к файловому хранилищу.


Откройте заданный путь хранения


ок, загрузка прошла успешно

адрес проекта

Адрес облака кода:git ee.com/bean также/no SPR…

Адрес гитхаба:GitHub.com/my bean also/no s…

Писать статьи непросто, если это вам поможет, нажмите звездочку

конец

Добавление функции загрузки нескольких файлов завершено, и последующие функции будут обновляться одна за другой.Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной по адресу mr_beany@163.com. Также попросите руководства у всех великих богов, спасибо всем.