SpringMVC笔记--10文件上传下载MultipartResolver、ResponseEntity

基于DNN、CNN与SVM的串联电弧故障智能检测:从原理到嵌入式部署 在电气安全与工业物联网领域,时间序列分类是处理传感器信号、实现状态监测与故障诊断的核心技术。其原理在于从连续的信号数据中提取有效特征,并利用机器学习模型识别异常模式。这项技术的核心价值在于能够实现设备预测性维护、提升系统安全性并降低运维成本,广泛应用于智能电表、电机健康监测、电力设备保护等场景。本文聚焦于电气安全中的一个具体且危险的隐患——串联电弧故障的检测。针对这一隐蔽性强、传统方法误报率高的问题,项目深入实践了三种主流AI模型:深度神经网络、卷积神经网络和支持向量机。通过对比DNN的通用特征学习能力、C 阅读详情

Spring文件上传下载

文件上传主要依赖的是MultipartResolver;

文件下载主要依赖的是ResponseEntity

1 文件上传

1.1 文件上传的配置要求

  • form表单

form表单的enctype属性为multiple/form-data时,浏览器就会采用二进制流来处理表单数据,服务器就会对文件上传的请求进行解析处理。

  • Spring MVC文件上传实现类

Spring MVC通过MultipartResolver实现文件上传功能。

MultipartResolver是一个接口,

CommonsMultipartResolver是他的实现类,

实现类是基于commons-fileupload技术的,所以需要导入包commons-fileupload和commons-io。

  • 配置 MultipartResolver

Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需先在上下文中配置 MultipartResolver

<bean id="multipartResolver" 
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"></property>
    <property name="maxUploadSize" value="8242880"></property>
</bean>

属性:

  • id:必须为multipartResolver,因为实现类内部引用multipartResolver字符串获取实现类对象并完成文件解析的。

  • defaultEncoding:必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容

  • maxUploadSize:允许上传文件大小的最大值(字节)

  • maxInMemeory:缓存中的最大尺寸

  • resoleLazily:推迟文件解析,以便在Controller中捕获文件大小

而服务器端接收到的文件的类型是MultipartFile,在要上传的目标路径下New一个File,把传来的multipartFile对象充到这个File中即可,如file.transferTo(new File(文件路径/文件名));,

1.2 文件上传示例

1) 拷贝jar包
commons-fileupload-1.2.1.jar
commons-io-2.0.jar
--------------------------
严重: Servlet /SpringMVC_06_FileUpload threw load() exception
java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
2) 配置文件上传解析器springMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 配置扫描的包 -->
    <context:component-scan base-package="org.songwang"/>
    <!--配置注解驱动  -->
    <mvc:annotation-driven />
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="org.songwang.interceptor.MainInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

    
    <!-- 文件上传和拦截器配置没有关系-->
    <!--配置文件上传解析器  id 名称必须为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置请求的编码格式-->
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>
</beans>
3) 浏览器端上传页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.net.URLEncoder" %>
<html>
<head>
    <title>主页面-拦截器测试</title>
</head>
<body>
    <p>${USER_SESSION.userName}</p>
    <a href="${pageContext.request.contextPath}/loginOut">退出登陆</a>

    <%--表单方式完成文件的上传和下载--%>
    <form action="${pageContext.request.contextPath}/fileUpload"
          method="post"
          enctype="multipart/form-data"
          "checkUpload()">
        用户名:<input type="text" name="userName" id="userName"><br/>
        上传文件:<input type="file" name="uploadFiles" id="uploadFiles"><br/>
        <input type="submit" value="上传">
    </form>

    <!--
    <a
    href="${pageContext.request.contextPath}/download?filename=xiaobai_72165431-37c9-459c-b7a9-ce0d2077b04e_吉佑社 - 不爱又何必纠缠.mp3">
    下载</a>
    -->
    <a href="${pageContext.request.contextPath }/download?filename=<%=
                                   URLEncoder.encode("xiaobai_72165431-37c9-459c-b7a9-ce0d2077b04e_吉佑社 - 不爱又何必纠缠.mp3", "UTF-8")%>">
        下载
    </a>

    <script>
        function checkUpload(){
            var userName = document.getElementById("userName");
            var uploadFiles = document.getElementById("uploadFiles");

            if(userName ==''){
                alert("请输入用户名");
                return false;
            }
            if(uploadFiles=='' || uploadFiles.length == 0){
                alert("请选择上传的文件");
                return false;
            }
            return true;
        }
    </script>
</body>
</html>
4) 服务器端控制器方法
package org.songwang.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.UUID;

@Controller
public class FileUploadController {

	/**
	 * 文件上传-------------------------------------
	 */
	@PostMapping("/fileUpload")
	public String fileUpload(@RequestParam("userName") String userName,
	                         @RequestParam("uploadFiles") List<MultipartFile> uploadFiles,
	                         HttpServletRequest request) {
		// 判断文件是否存在
		if (!uploadFiles.isEmpty() && uploadFiles.size() > 0) {
			// 循环输出上传文件
			for (MultipartFile file : uploadFiles){
				// 获取原始的文件名称
				String originalFilename = file.getOriginalFilename();
				// 设置上传文件的保存目录
				String uploadPath = 
                    request.getServletContext().getRealPath("/upload/");
				File filePath = new File(uploadPath);//这里创建的是目录文件夹
				System.out.println(uploadPath);

				if(!filePath.exists()){
					// 如果目录不存在就创建
					filePath.mkdir();
				}
				// 使用uuid重新命名上传文件的文件名称(上传人_uuid_文件名)
				String newFileName = userName + "_"+UUID.randomUUID()+"_"+originalFilename;

				try {
					// 使用MultipartFile接口的方法完成文件上传到指定位置
                    //新建文件并将流传到文件
					file.transferTo(new File(filePath+"\\"+newFileName));
					System.out.println(filePath+"\\"+newFileName);
                    // InputStream inputStream = multipartFile.getInputStream();// 输入流
				} catch (IOException e) {
					e.printStackTrace();
					return "error";
				}
			}
			return "success";

		}
		return "error";
	}

    // 文件下载的部分可以先看完后面的再返回来看-------------------------------------
    // /download?filename=<%=URLEncoder.encode("xiaobai_72107b04e_比噶比噶.mp3", "UTF-8")%>
	@RequestMapping("/download")
	public ResponseEntity<byte[]> fileDownload(//返回类型为ResponseEntity<byte[]>
        HttpServletRequest request,                       
        String filename
    ) throws Exception{
	    // 指定要下载的文件所在路径
	    String path = request.getServletContext().getRealPath("/upload/");
	    // 创建该文件对象
	    File file = new File(path+File.separator+filename);


		// 对文件名编码,防止中文文件乱码 // 
		filename = this.getFilename(request, filename);//结果还是字符串

		// 设置响应头
	    HttpHeaders headers = new HttpHeaders();
	    // 通知浏览器以下载的方式打开文件
	    headers.setContentDispositionFormData("attachment", filename);
        // res.setHeader("Content-Disposition","attachment;filename="+fileName);
	    // 定义以流的形式下载返回文件数据  //把二进制流放入到响应体中.
	    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	    // 使用Sring MVC框架的ResponseEntity对象封装返回下载数据
	   return new ResponseEntity<byte[]>(
           FileUtils.readFileToByteArray(file),//body//返回字节流
           headers,//头部
           HttpStatus.OK);//状态
        
        /*
        还有其他方式:
        BodyBuilder builder = (BodyBuilder) ResponseEntity.ok();
        builder.allow(HttpMethod.GET);
        builder.contentType(MediaType.TEXT_HTML);
        builder.eTag("W/MyeTag\"");
        return builder.body("Hello World!");
        ----------------------------------------
        ResponseEntity.status(HttpStatus.SC_CREATED).body("Created Success");
        ------------------------
        ResponseEntity.created(URL).
        header("MyResponseHeader","MyValue").body("Hello World");
 }
----------------------------

        */
	}
	/**
	 * 根据浏览器的不同进行编码设置,返回编码后的文件名
	 */
	public String getFilename(HttpServletRequest request,
	                          String filename) throws Exception {
		// IE不同版本User-Agent中出现的关键词 //这些都是IE
		String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
		// 获取请求头代理信息
		String userAgent = request.getHeader("User-Agent");
		for (String keyWord : IEBrowserKeyWords) {
			if (userAgent.contains(keyWord)) {
				//IE内核浏览器,统一为UTF-8编码显示
				return URLEncoder.encode(filename, "UTF-8");
			}
		}
		//火狐等其它浏览器统一为ISO-8859-1编码显示 //以UTF-8方式编码为字节,然后再把字节解码为8859字符
		return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
        // "中".getBytes("UTF-8");
	}
}

2 文件下载

下载文件的实现方式:

流程:请求给服务器发送的是URL,服务器根据这个URL把文件转成字节,发送给浏览器,浏览器就可以下载了。

服务器如何给浏览器发送文件字节流:
主要是通过ResponseEntity<T>,所以我们需要给他设定一个类型,常见的有ResponseEntity<String>用于返回字符串了;ResponseEntity<byte[]>用于返回文件。详见如下

ResponseEntity介绍:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

ResponseEntity
构造函数:
    ResponseEntity(HttpStatus status)
    ResponseEntity(MultiValueMap<String,String> headers, HttpStatus status)
    ResponseEntity(T body, HttpStatus status)
	ResponseEntity(T body, MultiValueMap<String,String> headers, HttpStatus status)
方法:
    static ResponseEntity.BodyBuilder	accepted() //静态方法,可以通过ResponseEntity.accepted()调用,调用结果为创建一个具有ACCEPTED的builder
    static ResponseEntity.BodyBuilder	badRequest() 静态方法
    static ResponseEntity.BodyBuilder	created(URI location)
    static ResponseEntity.BodyBuilder	ok() //返回一个状态码为ok:200的builder
---------------需要插入BodyBuilder介绍一下。---------------

----------结合两者就可以使用了-------------------------------------------------

我们最终要看懂的代码如下,是要实现文件的下载,其中涉及的一些别的知识可以跳过往下看。

//在Spring MVC中。
@RequestMapping("/handle")
public ResponseEntity<String> handle() {
    URI location = ...;//要求下载的文件的url
    HttpHeaders responseHeaders = new HttpHeaders();//响应http头部
    responseHeaders.setLocation(location);
    responseHeaders.set("MyResponseHeader", "MyValue");
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}
也可以
ResponseEntity.created(location).header("MyResponseHeader", "MyValue").body("Hello World");
ResponseEntity.BodyBuilder介绍:

文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.BodyBuilder.html

构造:
    通过ResponseEntity的静态方法调用,如ResponseEntity.ok()
方法:
    <T> ResponseEntity<T>	body(T body)//builder调用这个可以返回一个带有指定内容的http响应,如ResponseEntity.ok().body("123")
    ResponseEntity.BodyBuilder	contentLength(long contentLength)
    ResponseEntity.BodyBuilder	contentType(MediaType contentType)
    还有一些继承的方法:
    
HttpHeaders()介绍:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpHeaders.html

构造器:
    HttpHeaders() 构建一个空的HttpHeaders实例
    HttpHeaders(MultiValueMap<String,String> headers) 构建已经存在的Map构建一个HttpHeaders实例,这个Map里的key-value对应的是http响应头部的各个参数
    
方法:(简单举几例)
    getAccept() ;
    setAccept(List<MediaType> acceptableMediaTypes);
    setAcceptCharset(List<Charset> acceptableCharsets);
属性:
    ACCEPT :The HTTP Accept header field name.
    ACCEPT_CHARSET :The HTTP Accept-Charset header field name.
    ACCEPT_ENCODING:The HTTP Accept-Encoding header field name.
    ACCEPT_LANGUAGE:The HTTP Accept-Language header field name.

MediaType介绍:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html


HttpStatus介绍:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html

ACCEPTED :代表202
BAD_REQUEST 代表400
OK 200
NOT_FOUND 404 

这时候我们就能轻易看懂刚才的下载代码了

//在Spring MVC中。
@RequestMapping("/handle")
public ResponseEntity<String> handle() {
    URI location = ...;//要求下载的文件的url
    HttpHeaders responseHeaders = new HttpHeaders();//响应http头部,一会要传入ResponseEntity
    responseHeaders.setLocation(location);//继续设置头部的一些信息,随意设置,反正之后会传入ResponseEntity
    responseHeaders.set("MyResponseHeader", "MyValue");
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);//构造ResponseEntity,构造方法一次传入body、响应头、响应码
}
也可以
ResponseEntity.created(location).header("MyResponseHeader", "MyValue").body("Hello World");//解释:依次  调用created静态方法产生了builder,然后通过builder调用header方法产生的还是这个builder,builder调用body方法产生了一个ResponseEntity对象,

1.ResponseEntity的优先级高于@ResponseBody。在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。

2.ResponseEntity中的body和build什么时候使用?
看返回类型的泛型,build()的泛型是void,如果返回的是某一个对象而不是空的话就选择用body()。主要就是看T的类型,其功能都是一样的。

3 附:

        <form action="testUpload" method="post" enctype="multipart/form-data">
            文件: <input multiple="multiple" name="file"/><br/>
            描述: <input type="text" name="desc"/><br/>
            <input type="submit" value="提交"/>
        </form>
multiple属性是HTML5中新属性,可以实现多文件上传

ResponseEntity :标识整个http相应:状态码、头部信息、响应体内容(spring)

@ResponseBody:加在请求处理方法上,能够处理方法结果值作为http响应体(springmvc)

@ResponseStatus:加在方法上、返回自定义http状态码(spring)

考虑在SpringMVC.XML中设置静态资源访问权限
	<mvc:annotation-driven></mvc:annotation-driven>
	<!-- 静态资源 -->
	<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
	<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
	<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
	<mvc:resources location="/files/" mapping="/files/**"></mvc:resources>

文件下载的其他方式:

原理:

  • 先设置一下响应的头response.setHeader("Content-Disposition","attachment;filename="+fileName);
  • 通过response.getOutputStream();是创建输出流os,
  • 通过FileUtils.readFileToByteArray(file);把文件转成字节,
  • 然后把File字节注入到输出流中os.write(bytes);
    @RequestMapping("download")
    public void download(String fileName,HttpServletResponse res,
                         HttpServletRequest req) throws IOException{
        //设置响应流中文件进行下载// 通知浏览器以下载的方式打开文件
        res.setHeader("Content-Disposition","attachment;filename="+fileName);
        //把二进制流放入到响应体中.
        ServletOutputStream os = res.getOutputStream();
        String path = req.getServletContext().getRealPath("files");// 获取完整路径
        System.out.println(path);
        File file = new File(path, fileName);
        byte[] bytes = FileUtils.readFileToByteArray(file);
        os.write(bytes);
        os.flush();
        os.close();
    }

ThingsBoard教程(十九):规则节点概览介绍 在ThingsBoard的CE V2.5.6版本中,一共有这几种类型在每一种类都有包含了多个节点,每一种类型的节点都有不同的颜色表示本篇文章做一个简单的概括,后续的文章会详细讲解每一个种类的节点如何使用,每一个节点的使用。一共有10个,使用黄色表示 过滤器节点用于消息过滤和路由。一共有9个,使用绿色 属性节点用于更新传入消息的元数据。一共三个,使用蓝色 转换节点用于更改传入消息字段,如发起者、消息类型、有效负载和元数据。一共21个,使用红色标识 动作节点根据传入的消息执行各种动作。一共9个,使用黄色表示, 阅读详情

相关推荐

ArcGIS实战:地形湿度指数(TWI)计算全流程解析

本文详细解析了ArcGIS中地形湿度指数(TWI)的计算全流程,从DEM数据获取、填洼处理到水流方向与汇流累积量计算,最终实现TWI的精准计算。通过实战步骤指导,帮助读者掌握水文建模和土壤湿度预测的关键技术,适用于农业规划、生态研究等领域。

weixin_29231725的博客 869

乱炖

一、ResponseBody 、 ResposeEntity ResponseBody: return value should be bound to the web response body//返回值被绑定到web的响应体中。 ResposeEntity: (1)Extension of HttpEntitythat adds a ...

mobin518的博客 345

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 372

常用的ResponseEntity.BodyBuilder和自定义ResponseEntity例子

ResponseEntity.ok() 和 ResponseEntity.BodyBuilder() 返回200(HttpStatus.SC_OK)@RequestMapping("/check") public ResponseEntity<String> check() { BodyBuilder builder = (BodyBuilder) ResponseEntity.ok();

xavierqwb的博客 8225

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 304

python 爬虫 xpath 存储到数据库

参考

我是张先生 1288

使用ResponseEntity实现从服务器下载和向服务器上传文件功能

使用ResponseEntity实现从服务器下载和向服务器上传文件功能 SpringMVC中使用ResponseEntity实现向服务器上传文件功能 首先需要添加依赖 然后需要在SpringMVC配置文件中配置文件上传解析器,将上传的文件封装为MultipartFile对象

huing的博客 2384

【微服务】Java 对接飞书多维表格使用详解

Java 对接飞书多维表格使用详解

congge_study的博客 1万+

文件上传和下载:使用ResponseEntity实现文件上传与下载的功能

使用ResponseEntity实现文件上传与下载的功能

qq_47450919的博客 3001

SAP 管道业务(Pipeline Procurement)是用于水、电、气等不间断供应且无库存管理的物料采购场景,核心是消耗即记账、无库存持有,通过 MM-FI 集成实现实时负债与成本过账

摘要:SAP管道业务适用于水电气等无库存管理的物料采购场景,通过消耗即记账机制实现实时负债与成本过账。核心配置包括创建PIPE物料类型(无库存管理)、维护管道采购信息记录、配置自动记账科目等。SAP PO可集成外部系统实现流程自动化,如自动过账提取数据、发票校验等。实施要点在于物料主数据、信息记录和科目确定的精准配置,以及PO接口的可靠对接,最终构建端到端的高效采购与财务结算体系。

金牌架构师 748

RKNN 端侧部署必看:YOLOv11 Pose 姿态估计模型转换与性能优化实战

随着人工智能技术在边缘计算领域的快速发展,姿态估计作为计算机视觉的重要分支,在智能监控、人机交互、体感游戏等场景中展现出巨大的应用潜力。本文深入研究了YOLOv11 Pose模型在Rockchip RKNN平台上的部署方案,从理论基础、模型转换、平台优化到实际部署进行了全面阐述。通过详细的技术分析和实验验证,证明了RKNN平台能够有效提升YOLOv11 Pose的推理性能,在RK3588硬件平台上实现了高达100 FPS的实时姿态检测,为边缘计算场景下的姿态估计应用提供了高效的解决方案。

m0_71589036的博客 183

spring mvc @ResponseStatus和ResponseEntity

@ResponseStatus是标记一个方法或异常类在返回时响应的http状态。其代码注释如下: * * The status code is applied to the HTTP response when the handler * method is invoked and overrides status information set by other means, * like {

lycIT的博客 586

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

SpringMVC的文件上传和下载

    SpringMVC会根据请求方法签名的不同,将请求消息中的信息以一定的方式转换并绑定到请求方法的参数中。在请求消息到达真正调用处理方法的这段时间内,SpringMVC还会完成很多其他的工作,包括请求消息转换、数据转换、数据格式化以及数据校验。一:SpringMVC实现文件上传    为了实现文件上上传,必须将表单的method设置为POST,并将enctype设置为multipart/fo...

jz_say的博客 280

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SpringMVC——文件上传与下载

1.文件上传 多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单,而该表单必须满足以下3个条件: form表单的method属性设置为post; form表单的enctype属性设置为multipart/form-data; 提供<input type="file" name="filename" />的文件上传输入框; ...

Hern(宋兆恒) 972

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringMVC文件上传、下载、国际化配置

这里有一点要注意,如果使用的eclipse,那么使用request.getSession().getServletContext().getRealPath(“/upload/”),获取的就是部署到Tomcat的路径,可以直接获取,但是如果你使用的是Idea的话,它是把图片上传到了target这样一个文件夹内。在SpringMVC 中为我们提供了文件解析器,来实现上传文件的功能,MultipartResolver 本身是一个接口,我们需要通过它的实现类来完成对它的实例化工作。在页面中获取国际化内容;

yu的博客 556

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SpringMVC中的文件上传与下载功能,以及虚拟目录的配置

SpringMVC中的文件上传与下载功能是通过MultipartResolver来实现的。MultipartResolver是SpringMVC框架中用于处理文件上传的接口,它可以将客户端上传的文件转换为MultipartFile对象,从而方便开发者对文件进行处理。

m0_66111719的博客 1092

SpringMVC——处理json、文件上传和下载、拦截器、国际化

SpringMVC——处理json、文件上传和下载、拦截器、国际化一、springmvc处理json1.1 HttpMessageConverter介绍1.2 SringMVC响应json数据示例1.3 发送json数据给服务器示例1.4 HttpEntity、ResponseEntity 示例二、文件上传和下载三、拦截器3.1 自定义拦截器3.2 拦截器方法执行顺序3.3 拦截器源码分析(待补)四、国际化4.1 国际化简介4.2 步骤4.2 点击链接切换国际化 一、springmvc处理json 1.1

weixin_44630656的博客 852

Spring MVC(6)(文件上传下载)

版本:idea2020.1.1jdk1.8maven3.6.3 注:本文章摘自Java EE企业级应用开发教程,黑马程序员/编著,仅用于记录学习笔记,分享学习经历。 Tomcat配置参考:https://mp.csdn.net/editor/html/114296147 一、文件上传 1、文件上传概述 实现文件上传,必须提供一个满足三个条件的表单,三个条件如下: method属性必须是post、enctype属性必须为multipart/form-data、<input ty...

qq_44759192的博客 1051

使用SpringMVC实现文件上传和文件下载

SpringMVC实现文件上传和文件下载1.文件下载2.文件上传 1.文件下载 使用ResponseEntity实现文件下载功能 @RequestMapping("/testDown") public ResponseEntity<byte[]> testResponstEntity(HttpSession session) throws IOException { //获取ServletContext ServletContext servletCont

m0_48784077的博客 338

spring mvc实现文件上传与下载

文件上传 在pom.xml中引入spring mvc以及commons-fileupload的相关jar <!-- spring mvc --> <dependency> <groupId>org.springframework</groupId> ...

diaonangji4486的博客 70

SpringMVC学习笔记(九)文件上传和下载

SpringMVC学习笔记(九) 文章目录SpringMVC学习笔记(九)1.实现步骤2.简单例子需要的jar包需要在springmvc配置文件配置 MultipartResolver解析器上传页面:下载页面成功页面控制器 1.实现步骤   SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台参数的名称和表单提交的文件的名称一致   文件上传必须条件     1. 表单必须post        2. 表单必须有 file 文件域     3. 表单的 enctyp

qq_46046423的博客 284

十六、文件上传和下载

在 Eclipse 的 WebContent目录下,创建一个页面文件 download.jsp,将上述第(1)步的页面代码编写到 download.jsp 中,然后将第(2)步的 fileDownload()方法编写在FileUploadController类中。在后台使用Spring MVC提供的ResponseEntity类型对象完成文件下载,使用它可以很方便的定义返回的HttpHeaders对象和HttpStatus对象,通过对这两个对象的设置,即可完成下载文件时所需的配置信息。

m0_62639288的博客 422

SpringMVC实战(八)——文件上传与下载

该文章基于《Spring+MyBatis企业应用实战》进行总结,旨在积累巩固 文件上传 文件的上传需要在页面中设置enctype为multipart/form-data,method为post,如下所示: &lt;form action="XXX" enctype="multipart/form-data" method="post"&gt; &lt;input type=...

可爱滴老唐 234

SpringMVC文件上传下载全链路实践:流式处理与内存边界控制

文件上传下载是Web应用的基础能力,其本质是HTTP multipart协议在Servlet容器、Spring框架与JVM内存间的协同数据流转。理解`Content-Length`、`Range`请求、临时文件生命周期及`MultipartFile`的流式读取机制,是规避OOM、断连和磁盘满等生产故障的前提。核心在于建立‘流式处理’意识——避免`getBytes()`全量加载,善用`getInputStream()`与`ResourceRegion`实现恒定内存占用;同时严守‘内存边界’,合理配置Tomca

weixin_33845881的博客 304

Java EE之第16章文件上传和下载

第16章文件上传和下载16.1文件上传16.2文件下载 16.1文件上传 多数文件上传是通过表单形式提交给后台服务器的 要实现文件上传功能,需要提供一个文件上传的表单,表单必须满足以下3个条件: (1)form表单的method属性设置为post (2)form表单的enctype属性设置为multipart/form-data (3)提供<input type="file" name="f...

大马戏团的一头猪的博客 247
上一篇: SpringMVC笔记--9JSON和ResponseBody
下一篇: SpringMVC笔记--11 拦截器HandlerInterceptor
hancoder
博客等级 码龄9年 4135粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值