SpringBoot如何实现文件上传功能

技术SpringBoot如何实现文件上传功能这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的

贺盛德贺盛德贺盛德跳船阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔阿叔,朱庇特谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯谢尼伯,范仲淹还是范仲淹,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,你是说.

经典的文件上传

不,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,我不知道,你好你好你好,嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨。康伯坦(音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"音似"胸腺泡314演示一下,绿筠小姐胸腺泡菲兰达。

依赖关系

groupid rg。springframework。boot/groupid

artifactidpringr-boot starter-thmeleaf/artifactid

版本2 .5 .5/版本

/依赖哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟度级你是谁,吴亚玲!吴亚玲构建。格雷尔哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟:

编译组织。弹簧框架。靴子:弹簧靴启动器-thmeleaf 33336 2。5 '314行动起来你是说.

@RestController

@RequestMapping('/upload/*)

publicclassuploadaction

@ post apping(/file)

public objectuploadhandler(httpservletrequequest、Stringtitle、MultipartFilefile)>;

MapString,对象结果映射=newlink hashmap();

resultMap.put('title ',title);

resultMap.put('fileName,file。getname());//哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟

结果图。放('原始名称',文件。getriginalfilname());//嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯嚯

resultMap.put('content-type ',文件。get content type());//诶哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟

resultMap.put('fileSize ',文件。getsize()/1024 ' k ');//诶哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟

尝试[

//云娥

stringuploadedfilepath=保存文件(请求,文件。getinputstream()、file。getoriginalfilename()

nbsp。个

;.substring(file.getOriginalFilename().lastIndexOf(".") + 1));
            resultMap.put("uploadedFilePath", uploadedFilePath); // 文件大小
        } catch (IOException e) {
            System.err.println("error-path: /upload/file, message: " + e.getMessage());
        }
        return resultMap;
    }
    /**
     * 保存上传的文件到本地服务器
     *
     * @param request HttpServletRequest
     * @param input   输入流
     * @param ext     文件扩展名
     * @return 文件路径
     * @throws IOException
     */
    public String saveFile(HttpServletRequest request, InputStream input, String ext) throws IOException {
        String realPath = request.getServletContext().getRealPath("/upload/file/"); // 取得服务器真实路径
        File file = new File(realPath);
        if (!file.getParentFile().exists()) { // 目录不存在
            file.mkdirs(); // 创建多级目录
        }
        String filePath = realPath + UUID.randomUUID() + "." + ext;
        // 取的文件输出流
        OutputStream out = new FileOutputStream(filePath);
        byte[] data = new byte[2048]; // 缓冲数组2KB
        int len = 0; // 读取字节长度
        while ((len = input.read(data)) != -1) {
            out.write(data, 0, len); // 文件写入磁盘
        }
        if (input != null) {
            input.close();
        }
        out.close();
        return filePath;
    }
}

在resources目录下新建templates文件夹,在里面创建index.html文件作为项目首页展示。

<!doctype HTML>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>文件上传测试</title>
        <meta charset="UTF-8" />
    </head>
    <body>
        <form action="/upload/file" method="post" enctype="multipart/form-data">
            <span>标题:</span>
            <input type="text" name="title" /><br>
            <span>文件:</span>
            <input type="file" name="file" /><br>
            <input type="submit" value="上传"  />
        </form>
    </body>
</html>

启动项目,直接访问:http://localhost:8080/将进入index.html页面。

SpringBoot如何实现文件上传功能

点击上传按钮,文件将被保存到服务器磁盘中:

SpringBoot如何实现文件上传功能

SpringBoot对上传文件处理的简化

SpringBoot对FileUpload组件进行了整合,在文件保存的时候可以避免直接操作IO流,通过配置文件的方式指定文件上传的限制参数。修改application.yml文件:

server:
  port: 8080
spring:
  servlet:
    multipart:
      enabled: true  # 启用文件上传
      max-file-size: 1MB # 单文件上传最大限制
      max-request-size: 10MB # 文件上传最大值
      file-size-threshold: 10KB # 上传文件达到多大时写入磁盘
      location: / # 临时文件存储位置

修改UploadAction,使用MultipartFile类的transferTo方法保存上传文件。

@RestController
@RequestMapping("/upload/*")
public class UploadAction {
    @PostMapping("/file")
    public Object uploadHandler(HttpServletRequest request, String title, MultipartFile file) {
        Map<String, Object> resultMap = new LinkedHashMap<>();
        resultMap.put("title", title);
        resultMap.put("fileName", file.getName()); // 文件名
        resultMap.put("originalFilename", file.getOriginalFilename()); // 原始名称
        resultMap.put("content-type", file.getContentType()); // 文件类型
        resultMap.put("fileSize", file.getSize() / 1024 + "K"); // 文件大小
        try {
            // 保存文件
            String etc = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
            String serverPath = request.getScheme() + "://" + request.getServerName()
                    + ":" + request.getServerPort() + request.getContextPath() + "/file/upload/";
            String fileName = UUID.randomUUID() + "." + etc;
            resultMap.put("filePath", serverPath + fileName); // 文件地址(服务器访问地址)
            // 文件保存再真实路径下
            File saveFile = new File(request.getServletContext().getRealPath("/file/upload/") + fileName);
            if (!saveFile.getParentFile().exists()) { // 目录不存在,创建目录
                saveFile.mkdirs();
            }
            file.transferTo(saveFile); // 保存上传文件
        } catch (IOException e) {
            System.err.println("error-path: /upload/file, message: " + e.getMessage());
        }
        return resultMap;
    }
}

访问:http://localhost:8080/

SpringBoot如何实现文件上传功能

点击上传按钮:

SpringBoot如何实现文件上传功能

在浏览器上访问filePath,可以预览上传的文件:

SpringBoot如何实现文件上传功能

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringBoot如何实现文件上传功能”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/91877.html

(0)

相关推荐

  • 怎么使用oracle索引监控

    技术怎么使用oracle索引监控这篇文章主要介绍“怎么使用oracle索引监控”,在日常操作中,相信很多人在怎么使用oracle索引监控问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使

    攻略 2021年11月10日
  • 山西有什么山,山东、山西的山指的是什么

    技术山西有什么山,山东、山西的山指的是什么山东因居太行山以东而得名山西有什么山,简称“鲁”,山西在太行山以西简称“晋”。这个说法对于三晋大地和齐鲁大地的广大群众而言,可谓人尽皆知。但看看地图就知道,山西和山东中间咋还夹着

    生活 2021年10月26日
  • 如何使用树莓派自动签到贴吧

    技术如何使用树莓派自动签到贴吧这篇文章将为大家详细讲解有关如何使用树莓派自动签到贴吧,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。crontab -e3 0 * * *

    攻略 2021年11月19日
  • BUUCTF RE CrackRTF

    技术BUUCTF RE CrackRTF BUUCTF RE CrackRTFBUUCTF RE CrackRTFint __cdecl main_0(int argc, const char **ar

    礼包 2021年12月9日
  • 定位指定的服务器出错的处理方法是什么

    技术定位指定的服务器出错的处理方法是什么定位指定的服务器出错的处理方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。今天同事叫建一个用户,按老规矩建好

    攻略 2021年11月29日
  • 如何理解对Java的异常

    技术如何理解对Java的异常这篇文章主要介绍“如何理解对Java的异常”,在日常操作中,相信很多人在如何理解对Java的异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解对Java

    攻略 2021年10月23日