SpringMVC实现表单文件的上传

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

文件上传

储备知识

Content-Type

类型

HTTP的Content-Type是一种标识HTTP请求或响应中包含的实体的媒体类型的头部字段。它指示了数据的类型,使接收方能够正确处理数据。以下是一些常见的Content-Type类型:text/plain:纯文本,没有特定格式。
text/html:HTML文档。
text/css:Cascading Style Sheets (CSS)。
text/javascript:JavaScript代码。
application/json:JSON数据。
application/xml:XML数据。
application/pdf:Adobe PDF文档。
application/msword:Microsoft Word文档。
application/vnd.ms-excel:Microsoft Excel文档。
image/jpeg:JPEG图像。
image/png:PNG图像。
image/gif:GIF图像。
audio/mpeg:MPEG音频文件。
video/mp4:MP4视频文件。
multipart/form-data:通常用于文件上传,如表单数据,它可以包含文本字段和二进制文件。
application/x-www-form-urlencoded:通常用于HTML表单提交的默认编码,将表单数据编码为键值对。
application/octet-stream:未指定的二进制数据,通常是未知媒体类型。
application/zip:ZIP归档文件。
application/x-gzip:GZIP压缩文件。
application/octet-stream:通用的二进制流,通常用于未知或自定义数据格式。

Content-Type在表单提交的时候怎么设置

在表单提交时,您可以使用HTML的元素来设置Content-Type,通常是通过指定enctype属性。enctype属性用于指定在提交表单数据时使用的编码类型,以确保服务器能够正确处理数据。以下是两种常见的enctype属性设置:
·1、application/x-www-form-urlencoded(默认):
这是HTML表单提交的默认编码类型,会将表单字段编码为键值对,并以application/x-www-form-urlencoded的Content-Type提交。在HTML中,您无需显式指定它,因为它是默认值。

<form action="submit.php" method="post">
    <input type="text" name="username" value="John">
    <input type="text" name="email" value="john@example.com">
    <input type="submit" value="Submit">
</form>

2、multipart/form-data:
这是用于文件上传的编码类型,它允许表单包含二进制数据,例如文件。当您想要上传文件时,通常需要使用这个enctype属性。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="text" name="description" value="File description">
    <input type="submit" value="Upload">
</form>

enctype属性只适用于POST方法,因为GET方法不支持将数据请求体与表单一起发送。在处理接收到的表单数据时,服务器应该根据Content-Type来适当解析数据。如果您使用Java Servlet来处理表单提交,可以使用Commons FileUpload或Servlet 3.0+的request.getPart()方法来处理multipart/form-data编码类型的表单数据。
3、application/json
您需要在表单的enctype属性中指定application/json,这告诉浏览器提交的数据是JSON格式。

注意,enctype属性的值"application/json"不是HTML表单的标准内容类型,而是自定义的,因此,浏览器不会自动将表单字段编码为JSON数据。您需要使用JavaScript或其他手段将表单字段的值转换为JSON格式 使用JavaScript将表单数据转换为JSON: 使用JavaScript来监听表单的提交事件,并将表单字段的值转换为JSON格式。您可以使用JSON.stringify()函数来实现这一点。 ``` ```

上传文件的表单需要设置enctype=“multipart/form-data”

HTML表单需要设置enctype="multipart/form-data"这个属性,虽然不这么设置的确无法上传,但这是为什么呢?

HTML表单如何打包数据文件是由enctype这个属性决定的。enctype有以下几种取值:

application/x-www-form-urlencoded在发送前编码所有字符(默认)(空格被编码为’+’,特殊字符被编码为ASCII十六进制字符)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。
默认enctype=application/x-www-form-urlencoded,所以表单的内容会按URL规则编码,然后根据表单的提交方法:

method=’get’ 编码后的表单内容附加在请求连接后
method=’post’ 编码后的表单内容作为post请求的正文内容

springMVC进行文件上传

原文链接:https://blog.csdn.net/suifeng3051/article/details/51659731

配置mutipart resolver

实现文件上传,其实就是解析一个Mutipart请求。DispatchServlet自己并不负责去解析mutipart 请求,而是委托一个实现了MultipartResolver接口的类来解析mutipart请求。在Spring3.1之后Spring提供了两个现成的MultipartResolver接口的实现类:

CommonMutipartResolver:通过利用Jakarta Commons FileUpload来解析mutipart 请求
StandardServletMutipartResolver:依赖Servlet3.0来解析mutipart请求

所以要实现文件上传功能,只需在我们的项目中配置好这两个bean中的任何一个即可。其实这两个都很好用,如果我们部署的容器支持Servlet3.0,我们完全可以使用StandardServletMutipartResolver。但是如果我们的应用部署的容器不支持Servlet3.0或者用到的Spring版本是3.1以前的,那么我们就需要用到CommonMutipartResolver了。下面就具体介绍一下两种bean的配置,当然也是实现文件上传的两种配置。
方式一: 通过StandardServletMutipartResolver解析mutipart 请求
1)、配置multipartResolver的bean

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

2)、配置MutipartResolver相关属性
StandardServletMutipartResolver依赖于Servlet3.0,所以要想使用StandardServletMutipartResolver,我们还必须在DispatchServlet配置里面 注册一个 MultipartConfigElement元素,具体配置方式如下:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <location>/tmp/spittr/uploads</location>
        <max-file-size>2097152</max-file-size>
        <max-request-size>4194304</max-request-size>
    </multipart-config>
</servlet>

mutipart-config里面有三个配置项:

location:上传文件用到的临时文件夹,是一个绝对路径,需要注意,这个属性是必填的
max-file-size:上传文件的最大值,单位是byte,默认没有限制
max-request-size:整个mutipart请求的最大值,单位是byte,默认没有限制
方式二:通过CommonMutipartResolver 解析mutipart 请求
当然,如果我们部署的容器不是Servlet3.0,我们还可以使用CommonMutipartResolver,不过这个需要依赖Apache的commons-fileupload第三方类库。

<dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
</dependency>

配置multipartResolver的bean

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
       <property name="maxUploadSize" value="100000" />
       <property name="maxInMemorySize" value="100000" />
</bean>

写个前端和Crontroller测试一下
upload.jsp

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta charset="UTF-8" />
  <!--  -->
  <!-- Bootstrap -->
  <link rel="stylesheet" href="stylesheets/bootstrap.min.css">
  <script src="javascript/jquery.min.js"></script>
  <script src="javascript/bootstrap.min.js"></script>
</head>
<body>
<div class="container mt-5">
  <div class="row">
    <div class="col-md-6 offset-md-3">
      <h2 class="text-center">upload</h2>
      <form action="upload" method="post" enctype="multipart/form-data">
        <div class="form-group">
          <label for="file">select file</label>
          <input type="file" class="form-control-file" name="file" id="file" accept=".jpg, .png, .pdf, .xml">
        </div>
        <button type="submit" class="btn btn-primary">Upload</button>
      </form>
    </div>
  </div>
</div>
</body>

</html>

FileUploadController.java文章来源地址https://www.toymoban.com/news/detail-725579.html

package com.wpp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.ui.Model;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
@RequestMapping(value = "/")
public class FileUploadController {
    private static String UPLOADED_FOLDER = "/home/10307006@zte.intra/驱动/"; // 设置上传文件保存路径

    @GetMapping("/file")
    public String index() {
        return "upload";
    }
    @PostMapping("/upload")
    public String singleFileUpload(@RequestParam("file") MultipartFile file, Model model) {
        if (file.isEmpty()) {
            model.addAttribute("message", "请选择一个文件上传");
            return "upload";
        }

        try {
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
            Files.write(path, bytes);

            model.addAttribute("message", "文件上传成功: " + file.getOriginalFilename());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "upload";
    }
}

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

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

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

相关文章

  • Spring Boot实现文件上传和下载

    1.文件上传 在pom.xml文件中添加依赖: spring-boot-starter-web 和 spring-boot-starter-thymeleaf 。 创建一个上传前端的页面,包括一个表单来选择文件和一个提交按钮。 在Controller中添加一个POST方法,该方法接受 MultipartFile 参数,将文件保存在服务器上。 在application.properties文件中配置上

    2024年02月04日
    浏览(33)
  • Spring Boot 实现文件本地以及OSS上传

    Maven依赖 封装工具类 上面的代码我们可以定义一个工具类,这样在任何需要文件上传的地方只需要调用 upload 方法即可,大大减少了代码量 使用工具类

    2024年03月08日
    浏览(33)
  • Spring Boot实现文件上传的两种方式

    最近的一个小项目里使用到了文件上传、下载功能,今天我打算梳理一下文件上传所涉及的技术及实现。 内容主要包括两部分,如何通过纯 Servlet 的形式进行文件上传、保存(不通过 Spring 框架);另一部分是如何在 Spring Web MVC 中进行文件上传。 HTTP 协议传输文件一般都遵循

    2024年02月05日
    浏览(33)
  • Spring boot实现上传文件至本地或服务器

    大家好 我是程序猿小张 图片文件上传是项目中必不可少的一个功能,上传的地址也当然是优先选择第三方的对象存储,例如七牛云、阿里云等等,但是当中的话只有七牛云是有一个免费额度的,其他都是要收钱的。所以就想着,哎,这个能不能上传到本地呢?答案是肯定可

    2024年02月11日
    浏览(42)
  • Spring Boot + MinIO 实现文件切片极速上传技术

    🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:SpringBoot 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指

    2024年02月04日
    浏览(39)
  • java上传实现 spring boot +element ui

    先从element ui el-upload组件开始介绍。 关于headers 在return里写,这个即可获得headers 目录 1、得到文件上传路径,getUploadPath方法 2、FileUploadUtils里的upload方法,返回一个新的文件名 3、获取url  完整的FileUploadUtils  再来看后台controller 大致步骤分为以下: 1、得到文件上传路径,

    2024年02月12日
    浏览(25)
  • minio + linux + docker + spring boot实现文件上传与下载

    检查linux内核,必须是3.10以上 安装docker 启动docker 搜索镜像 拉取镜像 启动minio -p: 指定端口映射,格式为:主机端口:容器端口 (这里注意要映射两个,否则API会访问不到) -e “MINIO_ROOT_USER=vinci” minio用户名; -e MINIO_SECRET_KEY=123456 minio 密码 -d: 后台运行容器,并返回容器ID; -

    2024年02月07日
    浏览(40)
  • Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

    spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大

    2024年02月16日
    浏览(37)
  • Spring是什么?关于Spring家族

    什么是Spring? Spring是一个开源的Java企业级应用程序开发框架,由Rod Johnson于2003年创建,并在接下来的几年里得到了广泛的发展和应用。它提供了一系列面向对象的编程和配置模型,支持开发各种类型的应用程序,包括Web应用、移动应用、消息传递应用、批处理应用等等。

    2023年04月19日
    浏览(24)
  • 【SpringMVC】| 使用SpringMVC实现文件上传 | 下载功能

    SpringMVC是一个Web框架,提供了许多有用的功能,包括文件上传和下载。通过SpringMVC上传和下载文件,您可以允许用户上传文件,以便将它们存储在服务器上,或者允许用户从服务器上下载文件。这些都可以为您的应用程序添加有用的功能,例如: 允许用户上传和共享文件 -

    2024年02月02日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包