Spring Web文件上传功能简述

这篇具有很好参考价值的文章主要介绍了Spring Web文件上传功能简述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正文

在日常项目开发过程中,文件上传是一个非常常见的功能,当然正规项目都有专门的文件服务器保存上传的文件,实际只需要保存文件路径链接到数据库中即可,但在小型项目中可能没有专门的文件服务器用来存储这些文件,这时就需要我们自己手动实现文件上传功能了。

简单文件上传

在SpringWeb项目中要想实现文件上传也很简单,通过接收 MultipartFile类型的文件即可接收到文件参数,一个简单的文件上传Controller接口代码如下

@RestController
@RequestMapping("/test")
public class TestController {
    @CrossOrigin
    @PostMapping("/file")
    public String testFileUpload(MultipartFile file){
        String oriName = file.getOriginalFilename();
        return "已收到上传文件:"+oriName;
    }
}

这时只需要前端通过<input type="file"/>标签获取文件并使用FormData的方式上传即可,简单代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FileUploadDoc</title>
    <style>
        .contain{
            margin-left: 300px;
            margin-top: 100px;
            border: blanchedalmond solid;
            width: 310px;
            padding: 10px;
        }
    </style>
</head>
<body>
<div class="contain">
    <input id="uploadedInput" type="file" name="uploadedFile">
    <button id="submitBtn">提交</button>
</div>
</body>
<script>
    let btn = document.getElementById("submitBtn")
    let fileInput = document.getElementById("uploadedInput")
    btn.addEventListener("click",()=>{
        let fileData=fileInput.files[0]
        let formData = new FormData()
        formData.append("file",fileData)
        //注意:这里不需要设置Content-Type参数
        let xhr = new XMLHttpRequest();
        xhr.open("POST","http://localhost:18080/test/file")
        xhr.send(formData)
        xhr.onreadystatechange=()=>{
            if (xhr.status===200){
                console.log(xhr.responseText)
            }
        }
    })
</script>
</html>

效果如下

Spring Web文件上传功能简述,Spring技术,spring,前端,java

选择文件后,通过点击提交按钮即可将所选文件上传到后端服务器。

这里有一个问题需要注意,如果上传失败报错,需要设置

  1. 最大文件大小,参数名spring.servlet.multipart.max-file-size,默认值1MB

  2. 单个请求最大值 ,参数名spring.servlet.multipart.max-request-size,默认值10MB

这两个参数,在SpringBoot项目中由于存在默认配置,可以不设置,若需要修改默认值则需根据实际情况设置这两个参数。

如果超出尺寸大小的限制会抛出这两个异常

  1. 文件大小超出限制异常为 FileSizeLimitExceededException
  2. 请求内容超出限制异常为 SizeLimitExceededException

文件写入

一般情况下的上传业务,需要将文件写入到固定的文件夹下,而当遇到同名文件时需要覆盖原来的文件。面对这种业务逻辑需要修改代码如下

@CrossOrigin
@PostMapping("/file")
public String testFileUpload(MultipartFile file) throws IOException {
    if (file == null) {
        return "上传文件不能为空";
    }

    //获取文件名
    String oriName = file.getOriginalFilename();
    //文件保存文件夹
    String dirPath = "D:\\Activities\\temp_files";
    File serverFile = new File(dirPath, oriName);
    //判断文件是否存在
    if (serverFile.exists()) {
        serverFile.delete();
    } else {
        serverFile.createNewFile();
    }
    //读取文件并上传
    try (InputStream input = file.getInputStream();
         BufferedInputStream bIn = new BufferedInputStream(input);
         OutputStream output = new FileOutputStream(serverFile);
         BufferedOutputStream bOut = new BufferedOutputStream(output)) {
        byte[] byteArr = new byte[1024];
        int len = 0;
        while ((len = bIn.read(byteArr)) > 0) {
            bOut.write(byteArr, 0, len);
        }
    }

    return "已收到上传文件:" + oriName;
}

另一种常见的业务逻辑是,校验文件格式(如:只支持txt文件格式)后,对其进行重命名后返回一个网络地址,这时可使用以下代码

@CrossOrigin
@PostMapping("/file")
public String testFileUpload(MultipartFile file) throws IOException {
    if (file == null) {
        return "上传文件不能为空";
    }

    StringBuffer fileNameBuf = new StringBuffer();
    fileNameBuf.append(System.currentTimeMillis()).append(UUID.randomUUID());
    String oriName = file.getOriginalFilename();
    //校验.txt和.TXT文件格式
    Pattern pattern = Pattern.compile("^.+[.txt|.TXT]$");
    if(pattern.matcher(oriName).matches()) {
        fileNameBuf.append(".txt");
    }else{
        return "文件格式错误,只支持txt文件";
    }

    String dirPath = "D:\\Activities\\temp_files";
    File serverFile = new File(dirPath, fileNameBuf.toString());
    if (serverFile.exists()) {
        return "文件上传失败,请重试";
    } else {
        serverFile.createNewFile();
    }
    try (InputStream input = file.getInputStream();
         BufferedInputStream bIn = new BufferedInputStream(input);
         OutputStream output = new FileOutputStream(serverFile);
         BufferedOutputStream bOut = new BufferedOutputStream(output)) {
        byte[] byteArr = new byte[1024];
        int len = 0;
        while ((len = bIn.read(byteArr)) > 0) {
            bOut.write(byteArr, 0, len);
        }
    }

    //生成网络链接
    StringBuffer webPath = new StringBuffer("文件上传成功,文件访问链接为:");
    webPath.append("https://img.sunyog.top/temp_files/").append(fileNameBuf);
    return webPath.toString();
}

总结

本文简单介绍了在Spring Web项目中文件上传相关的业务,在Spring中文件上传通过接收 MultipartFile类型的参数即可实现,获取到文件后可根据具体的业务逻辑进行相应处理。而在JavaScript中需要做的仅仅是获取所选文件,并通过FormData传输数据即可。


📩 联系方式
邮箱: qijilaoli@foxmail.com
掘金: https://juejin.cn/user/873463590162108
CSDN: https://blog.csdn.net/qq_43408971

❗版权声明
本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问我的个人中心文章来源地址https://www.toymoban.com/news/detail-815983.html

到了这里,关于Spring Web文件上传功能简述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring实现文件上传,文件上传

         服务端能不能获得数据,能            提交:  后台打印成功:  这就代表我们获得这个文件了,现在我们对这个文件进行保存:          选个文件:上床成功  

    2024年02月16日
    浏览(27)
  • spring boot文件上传

    文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。 文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。 前端代码: 后端代码: 对于阿里云的oss的使用可阅读对象存储 OSS官方文档 导入依赖

    2024年02月08日
    浏览(38)
  • Spring MVC文件上传

    Spring MVC 框架的文件上传基于 commons-fileupload 组件,并在该组件上做了进一步的封装,简化了文件上传的代码实现,取消了不同上传组件上的编程差异。 在 Spring MVC 中实现文件上传十分容易,它为文件上传提供了直接支持,即 MultpartiResolver 接口 MultipartResolver 用于处理上传请求

    2024年02月15日
    浏览(40)
  • Spring MVC 文件上传

    编写controller 在index.jsp里面定义超链接

    2024年02月02日
    浏览(34)
  • Spring Boot中实现文件上传

    要在Spring Boot中实现文件上传,可以按照以下步骤进行操作: 添加依赖:在Maven或Gradle配置文件中添加Spring Boot Web相关的依赖。 创建文件上传接口:创建一个控制器(Controller)类,定义文件上传的接口。例如: java复制代码 import org.springframework.web.bind.annotation.PostMapping; impor

    2024年02月12日
    浏览(32)
  • Spring Boot 实现多文件上传

    代码结构: Controller层 跨域拦截器配置 application.properties 配置 前端页面 效果展示 获取图片的url并且读取图片 修改tomcat的server.xml文件 加上下面这句

    2023年04月08日
    浏览(37)
  • 3.6 Spring MVC文件上传

    1. 文件上传到本地 实现方式 Spring MVC使用commons-fileupload实现文件上传,注意事项如下: l HTTP请求方法是POST。 l HTTP请求头的Content-Type是multipart/form-data。 SpringMVC配置 配置commons-fileupload插件的文件上传解析器CommonsMultipartResolver,id是multipartResolver。 2. 文件上传到阿里云OSS 阿里云

    2024年02月13日
    浏览(26)
  • Spring MVC学习之——上传文件

    编写controller 注意在controller方法的参数中 MultipartFile upload的参数名一定要和jsp中上传input的name保持一致,否则会报空指针异常。 在index.jsp里面定义超链接 注意表单在加入上传的input后,一定要写enctype=“multipart/form-data”,否则controller会接收不到,报错空指针

    2024年01月20日
    浏览(37)
  • Java Web 实现文件上传和下载接口功能

    上传用post或者get请求都可以,这里代码中用post做的示例。 文件下载除了静态访问(及nginx、tomcat等服务器映射到后的文件web路径)下载以外 ,还可以通过流的方式下载,代码如下: 上传用post或者get请求都可以,这里代码中用post做的示例。  ForbiddenException 访问权限异常类

    2024年02月11日
    浏览(36)
  • spring boot 上传文件的大小限制

    根据spring boot 版本不同在application.properties文件添加不同的配置 Spring Boot 1.3 或之前的版本,配置: Spring Boot 1.4 版本后配置更改为: Spring Boot 2.0 之后的版本配置修改为: 单位Mb改为MB了: 以上配置直接在配置文件中即可

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包