首页 > 其他分享 >SpringMVC 文件上传

SpringMVC 文件上传

时间:2023-10-06 13:12:56浏览次数:42  
标签:文件 String SpringMVC System println import 上传 out

SpringMVC 文件上传

<!--支持文件上传-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--maxUploadSizePerFile:单个文件大小限制
    maxUploadSize:整个请求大小限制-->
    <property name="maxUploadSizePerFile" value="#{10*1024*1024}"/>
    <property name="maxUploadSize" value="#{100*1024*1024}"/>
</bean>
       
package com.tobie.upfile;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

/**
 * @author Tobieance
 * @description 上传控制器
 * @date 2023-09-14 11:37
 */
@Controller
@RequestMapping("/upload")
public class UploadController {
    /**
     * <h2>单文件上传</h2>
     *
     * @param file     文件
     * @param modelMap 模型映射
     * @return {@link String}
     * @throws IOException
     */
    @RequestMapping("/upload1")
    public String upload1(@RequestParam("file1") MultipartFile file, ModelMap modelMap) throws IOException {
        System.out.println(file);
        //获取文件名
        String originalFileName = file.getOriginalFilename();
        System.out.println(originalFileName);
        //设置保存文件路径
        String path = String.format("E:\\%s", originalFileName);
        //创建上传文件实例
        File destFile = new File(path);
        //写文件
        file.transferTo(destFile);
        String message = String.format("上传文件<b>%s</b>至<b>%s</b><br/>成功!", originalFileName, path);
        modelMap.addAttribute("msg", message);
        return "result";
    }

    /**
     * <h2>多文件处理(仅文件)</h2>
     *
     * @param file1    文件1
     * @param file2    文件2
     * @param modelMap 模型映射
     * @return {@link String}
     * @throws IOException
     */
    @RequestMapping("/upload2")
    public String upload2(MultipartFile file1, MultipartFile file2, ModelMap modelMap) throws IOException {
        System.out.println(file1);
        System.out.println(file2);
        //具体实现与案例1相似
        //获取文件名
        String originalFileName1 = file1.getOriginalFilename();
        String originalFileName2 = file1.getOriginalFilename();
        System.out.println(originalFileName1);
        System.out.println(originalFileName2);
        //设置保存文件路径
        String path1 = String.format("E:\\%s", originalFileName1);
        String path2 = String.format("E:\\%s", originalFileName2);
        //创建上传文件实例
        File destFile1 = new File(path1);
        File destFile2 = new File(path2);
        //写文件
        file1.transferTo(destFile1);
        file2.transferTo(destFile2);
        String message = String.format("上传文件 <b>%s</b> 至 <b>%s</b> 成功!<br/>" +
                "上传文件 <b>%s</b> 至 <b>%s</b> 成功!", originalFileName1, path1, originalFileName2, path2);
        modelMap.addAttribute("msg", message);
        return "result";
    }


    /**
     * <h2>多文件处理(带普通控件)</h2>
     *
     * @param request
     * @param modelMap
     * @return {@link String}
     * @throws IOException
     */
    @RequestMapping("/upload3")
    public String upload3(MultipartHttpServletRequest request, ModelMap modelMap) throws IOException {
        //TODO:获取普通控件数据
        System.out.println("---------获取普通控件数据--------");
        //key:控件的name属性 value:控件属性值(可能有多个值)
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.forEach((name, values) -> {
            System.out.println(String.format("%s:%s", name, Arrays.asList(values)));
        });
        //TODO:获取文件数据
        //key:控件的name属性 value:文件数据
        MultiValueMap<String, MultipartFile> multiValueMap = request.getMultiFileMap();
        multiValueMap.forEach((name, file) -> {
            System.out.println(String.format("%s:\n%s", name, file));
        });
        String message = String.format("上传文件成功!");
        modelMap.addAttribute("msg", message);
        return "result";
    }

    @RequestMapping("/upload4")
    public String upload4(@ModelAttribute("msg")UserDto userDto) throws IOException {
        System.out.println(userDto);
        return "result";
    }

}

标签:文件,String,SpringMVC,System,println,import,上传,out
From: https://www.cnblogs.com/tobieance/p/17744461.html

相关文章

  • SpringMVC 异常处理
    SpringMVC异常处理异常处理类ExceptionHandlerpackagecom.tobie.globalexception;importorg.springframework.ui.ModelMap;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;import......
  • SpringMVC入门demo
    工作流程demo使用:配置文件配置DispatcherServlet<?xmlversion="1.0"encoding="UTF-8"?><!--更新版本为4.0--><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/j......
  • SpringMVC 类型转换
    SpringMVC类型转换Spring引入通用的数据类型转换系统,其定义了SPI接口和相应的运行时执行类型转换的API,提供无状态、强类型其可以在任意类型之间进行类型转换,可以用于任何需要的地方(如SpEL、数据绑定等)内置类型转换器<!--开启类型转换服务--><mvc:annotation-drivenconver......
  • 基于现有dtb文件修改内容
     当有修改dtb需要,又不想经过linux编译生成dtb时,可以通过dtc工具进行dtb->dts,dts->dtb的转换。dtc工具可以进行dtb和dts之间的转换,dts是可编辑文本。Ubuntu下安装dtc工具:sudoapt-getinstalldevice-tree-compiler1dtc将dtb反编译为dtsdtc-Idtb-Odtsxxx.d......
  • 多线程文件复制,断点继续复制
    ​1、思路多线程首先要对文件进行分割,这里使用每个子线程的任务大小固定的方法,根据文件大小分配不同数量的子线程。要实现断点下载,必须要记录已经复制的位置,每次继续时从上次下载的结束位置继续复制,这里将已经复制的文件位置以long类型写入一个日志文件,继续下载时每个线程从对......
  • Linux 嵌入式根文件系统文件调用流程
    原文:https://blog.csdn.net/KingRing_/article/details/121589073Linux嵌入式根文件系统文件调用流程当我们将根文件系统挂载起来后,加载busybox中的init程序,创建init进程,init进程在运行过程中会读取/etc/inittab文件,在inittab文件中,会读取解析/etc/init.d/rcS文件,然后执行/etc/i......
  • 解决IDEA中.properties文件中文变问号(???)的问题(已解决)
    问题背景构建SpringBoot项目时,项目结构中有一个application.properties文件。这个项目是SpringBoot一个特有的配置文件。内容如下(我写了一些日志的配置):写到这刚好到饭点,我打算回来吃个饭继续写,于是关闭了IDEA当我吃完回来打开电脑,发现刚写的代码变成这样:玛德,我汉字呢???解决......
  • 线程数对samtools对bam文件构建索引速度的影响
     001、(base)[b20223040323@admin1test]$lsERR2985610.sorted.markdup.bam##1线程(base)[b20223040323@admin1test]$timesamtoolsindex-@1ERR2985610.sorted.markdup.bamreal1m3.268suser1m35.792ssys0m5.750s......
  • delphi中unit单元文件说明
    单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用。一个单元至少要有unit语句,interface,和implementation三部分,也能可选的包含initialization和finalization两部分:一、必含部分1、unit语句每一个单元都必须在开头有这样一条语句......
  • ESP32BOX的bin文件,docs文件夹,SDK作用介绍,以及了解从上电到app_main中间做了什么
    ESP32-BOX的GitHub链接(1)ESP32-BOX的GitHub链接factory_demo产生的bin文件作用(1)<1>bootloader.bin:引导加载程序映像由与应用程序映像相同的结构组成,用于决定是进入OTA升级还是进入正常程序。这个已经包含了应用代码以及底层代码。<2>factory_demo.bin:这个应该就是factory_demo程序......