springboot上传文件最简单的操作

在开始之前我们先说下multipart的配置 直接在application.properties进行配置即可 我写的很清楚了就不说了 这些都是默认值

#单个上传文件最大
spring.servlet.multipart.max-file-size=1MB
#上传文件总大小最大
spring.servlet.multipart.max-request-size=10MB
#(零界值)超过零界值就忘硬盘写  不超过写内存
spring.servlet.multipart.file-size-threshold=0
#文件很大的话  需要一个临时文件夹保存文件  然后再写入硬盘  这就是那个路径设置
spring.servlet.multipart.location=

我们以上传img为例 我们使用@RestController注解哦

开始之前我们先复习几个servletRequest 的方法

获取web应用上下文 request.getServletContext()

获取项目的绝对路径 getRealPath(String)

一般来说不支持单独使用getRealPath 我们会使用 request.getServletContext().getRealPath(String)获取web应用的相对路径的绝对路径

我们给我们的文件进行分类 使用时间进行分类会更好一点

那么我们创建一个现行时间

 SimpleDateFormat sdf=new SimpleDateFormat("/yyyy-MM-dd");

我们设置绝对路径为realPath 在这儿我们可以提一个知识点 这是se基础知识

String lujing=d:\a\\b

使用file.mkdirs创建的话 没有a不能创建b

使用file.mkdirs创建的话 没有a我们也可以创建b 那么a也会被创建

	   String format =  sdf.format(new Date());
        String realPath = request.getServletContext().getRealPath("/img") + format;
        //文件夹
        File folder = new File(realPath);
        //如果文件夹不存在那么我们就创建一下
        if(!folder.exists()){
            folder.mkdirs();
        }

路径弄完了 我们来设置文件名

我们为了防止名称重复使用uuid进行创建 那么我们设置newName 下面代码就是se中String的基础知识了

       //获取传来的文件名字
       String originalFilename = file.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

下面我们存下文件 然后我们吧路径返回


        try {
            //存文件
            file.transferTo(new File(folder,newName));
            String url=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/img"+format+newName;
            return url;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";

我们解析下下面代码

request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/img"+format+newName;

request.getScheme() 获取http协议 正常来说返回的是 http

request.getServerName() 获取我们的访问ip 本地项目一般是localhost

request.getServerPort() 获取我们的端口号

最后呢我们可以在html中写文件上传控件

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fileupload</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="提交">
</form>
</body>
</html>

基本上都是基础 我们说一下enctype=“multipart/form-data”

这个的意思就是说表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。

需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。

application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。

扩展资料(以下资料来源于网络):

一、关于HTML 标签的 enctype 属性

application/x-www-form-urlencoded:在发送前编码所有字符(默认)

multipart/form-data: 不对字符编码,或在使用包含文件上传控件的表单时,必须使用该值。

text/plain:空格转换为 “+” 加号,但不对特殊字符编码。

二、enctype:规定了form表单在发送到服务器时候编码方式,有如下的三个值。

1、application/x-www-form-urlencoded。默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。

2、multipart/form-data 。 指定传输数据为二进制类型,比如图片、mp3、文件。

3、text/plain。纯7a64e78988e69d8331333366306562文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

下面放下我们全部的java代码和html代码

package com.file;

@RestController
public class FilruploadController {

    SimpleDateFormat sdf=new SimpleDateFormat("/yyyy-MM-dd/");
    @PostMapping("/upload")
    public String file(MultipartFile file, HttpServletRequest request){
        String format =  sdf.format(new Date());
        String realPath = request.getServletContext().getRealPath("/img") + format;
        //创建文件夹路径
        File folder = new File(realPath);
        //如果文件夹已经不存在那么我们就创建一下
        if(!folder.exists()){
            folder.mkdirs();
        }
        String originalFilename = file.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
        try {
            file.transferTo(new File(folder,newName));
            String url=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/img"+format+newName;
            return url;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

}

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fileupload</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值