【Spring Boot 2.0学习之旅-02-7】Spring2.x 文件上传实战

本文介绍如何使用SpringBoot实现文件上传功能,包括前端HTML页面设计、后端代码编写及文件大小配置等内容。

第二章:SpringBoot接口Http协议开发实战

02-7 Spring2.x 文件上传实战

简介:讲解HTML页面文件上传和后端处理实战
	1、讲解springboot文件上传 MultipartFile file,源自SpringMVC
					
		1)静态页面直接访问:localhost:8080/index.html
			注意点:
				如果想要直接访问html页面,则需要把html放在springboot默认加载的文件夹下面
		2)MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)
		访问路径 http://localhost:8080/images/39020dbb-9253-41b9-8ff9-403309ff3f19.jpeg

1.创建spring boot应用

选择File-New-Project。新建项目。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加依赖信息。

在这里插入图片描述

2.创建静态页面

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传页面</title>
</head>
<body>
    <form enctype="multipart/form-data" method="post" action="/upload">
        文件:<input type="file" name="upload_img">
        姓名:<input type="text" name="upload_name">
        <input type="submit" value="上传">
    </form>
</body>
</html>

查看一下效果:

在这里插入图片描述

3.创建后端代码

在src/main/java下创建controller以及对结果进行封装。

首先在创建JsonData.java文件,用以封装结果。

package com.example.spring_demo3.domain;

import java.io.Serializable;

/**
 * @author : codingchao
 * @date : 2021-11-17 13:43
 * @Description:
 **/
public class JsonData implements Serializable {

    //状态码:0表示成功 -1表示失败
    private int code;
    //描述信息
    private String msg;
    //数据
    private Object data;

    public JsonData(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

之后创建FileUploadController文件用以文件上传的后端代码。

package com.example.spring_demo3.controller;

import com.example.spring_demo3.domain.JsonData;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author : codingchao
 * @date : 2021-11-17 13:46
 * @Description:
 **/
@Controller
public class FileUploadController {
    //保存路径
    private static final String savePath = "D:\\000\\spring_study\\spring_demo3\\src\\main\\resources\\static\\images\\";

    @RequestMapping(value = "upload")
    @ResponseBody
    public JsonData upload(@RequestParam("upload_img")MultipartFile file, HttpServletRequest request){
        //可补充
        //file.isEmpty(); 判断图片是否为空
        //file.getSize(); 图片大小进行判断

        // 获取用户名
        String name = request.getParameter("upload_name");
        System.out.println("用户名:"+name);

        //获取文件名
        String fileName = file.getOriginalFilename();
        System.out.println("上传的文件名为:"+fileName);

        //获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        System.out.println("上传的后缀名为:"+suffixName);

        //新文件的名称
        fileName = UUID.randomUUID() + suffixName;
        System.out.println("转换后的新文件名称:"+fileName);

        File dest = new File(savePath+fileName);

        try {
            file.transferTo(dest);
            //封装返回
            return new JsonData(0,"文件上传成功",fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new JsonData(-1,"文件上传失败",null);
    }

}

结果展示

在这里插入图片描述

在这里插入图片描述

4.jar包文件运行web项目的文件上传和访问处理实战

简介:讲解SpingBoot2.x使用 java -jar运行方式的图片上传和访问处理

1、文件大小配置,启动类里面配置
		@Bean  
	    public MultipartConfigElement multipartConfigElement() {  
	        MultipartConfigFactory factory = new MultipartConfigFactory();  
	        //单个文件最大  
	        factory.setMaxFileSize("10240KB"); //KB,MB  
	        /// 设置总上传数据总大小  
	        factory.setMaxRequestSize("1024000KB");  
	        return factory.createMultipartConfig();  
	    }  

2、打包成jar包,需要增加maven依赖
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	如果没加相关依赖,执行maven打包,运行后会报错:no main manifest attribute, in XXX.jar

	GUI:反编译工具,作用就是用于把class文件转换成java文件

3、文件上传和访问需要指定磁盘路径
	application.properties中增加下面配置
		1) web.images-path=/Users/jack/Desktop
		2) spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/test/,file:${web.upload-path} 

4、文件服务器:fastdfs,阿里云oss,nginx搭建一个简单的文件服务器

a.文件大小限制

这里我们先上传一个大小超过1MB的图片,看服务器是否 支持。

在这里插入图片描述

在这里插入图片描述

本次springboot设置上传文件大小的两种方式

第一种:启动类添加限制

package com.example.spring_demo3;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

@SpringBootApplication
public class SpringDemo3Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringDemo3Application.class, args);
    }


    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大
        factory.setMaxFileSize(DataSize.parse("10240KB")); //KB,MB
        /// 设置总上传数据总大小
        factory.setMaxRequestSize(DataSize.parse("1024000KB"));
        return factory.createMultipartConfig();
    }
}

上传效果展示

在这里插入图片描述

第二种方法:properties修改

spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=20MB

在这里插入图片描述

b.修改保存的文件地址以及访问地址

在application.properties中修改配置文件

web.upload-path=D:\\

spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/

直接访问显示

在这里插入图片描述

c.打包成jar包运行

在这里插入图片描述

在target文件夹下得到生成的jar包文件

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值