`
mhtbbx
  • 浏览: 36394 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring使用multipart请求处理文件上传

阅读更多
在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——Spring MVC其中的一个优势。Spring通过对Servlet API的HttpServletRequest接口进行扩展,使其能够很好地处理文件上传。扩展后的接口名为org.springframework.web.multipart.MultipartHttpServletRequest,其内容如清单7-31所示。

清单7-31  org.springframework.web.multipart.MultipartHttpServletRequest接口

interface MultipartHttpServletRequest extends HttpServletRequest {

public MultipartFile getFile(String name);

public Map getFileMap();

public Iterator getFileNames();

}

如清单所示,MultipartHttpServletRequest接口简单地扩展了默认的HttpServletRequest接口,并提供一些用来处理请求文件的方法。

7.10.1  使用multipart请求

实际上只要发现一个multipart请求,就表明在控制器实例中存在一个实现Multipart HttpServletRequest接口的request对象。我们可以通过清单7-31所示的方法来访问multipart请求中的上传文件,不过在处理上传文件之前,先来看一下上传表单的内容,如清单7-32所示。

清单7-32  上传表单示例

<form action="upload" enctype="multipart/form-data">

<input type="file" name="myFile" />

<input type="submit" value="Upload! " />

</form>

粗体显示的是需要注意的部分,实际上一个上传表单只需要满足如下两点。

l  enctype属性的属性值设为multipart/form-data。

l  input的type属性的属性值设为file。

在前面的示例中,<input>标签中属性type的值为file,且name属性的值为myFile,之所以需要name属性值,是因为在使用接口MultipartHttpServletRequest的getFile方法时需要使用name属性的值。例如在清单7-33中,代码中的upload操作会从请求中读取上传文件。

清单7-33  读取上传文件

def upload = {

def file = request.getFile('myFile')

// 处理该文件

}

注意getFile方法不会返回一个java.io.File的实例,而是返回org.springframework.web. multipart.MultipartFile的一个实例,关于org.springframework.web.multipart.MultipartFile的详细信息,请参考清单7-34。如果在请求中没有找到文件则getFile方法返回null。

清单7-34  org.springframework.web.multipart.MultipartFile接口

interface MultipartFile {

public byte[] getBytes();

public String getContentType();

public java.io.InputStream getInputStream();

public String getName();

public String getOriginalFilename();

public long getSize();

public boolean isEmpty();

public void transferTo(java.io.File dest);

}

在MultipartFile接口中定义了如下很多有用的方法。

l  使用getSize()方法获得文件长度,以此决定允许上传的文件大小。

l  使用isEmpty()方法判断上传文件是否为空文件,以此决定是否拒绝空文件。

l  使用getInputStream()方法将文件读取为java.io.InputStream流对象。

l  使用getContentType()方法获得文件类型,以此决定允许上传的文件类型。

l  使用transferTo(dest)方法将上传文件写到服务器上指定的文件。

例如,如果上传的文件不为空并且大小不小于1024字节,那么可以按照清单7-35中的代码来实现。

清单7-35  文件上传示例

def upload = {

def file = request.getFile('myFile')

if(file && !file.empty && file.size < 1024) {

file.transferTo( new java.io.File( "/local/server/path/${file.name}" ) )

}

}

直接使用MultipartHttpServletRequest实例可以用来管理文件上传,但实际应用常常需要读取文件内容。
分享到:
评论

相关推荐

    Spring Multipart工作原理(文件上传到服务器)

    在文件上传时,浏览器会使用这种编码方式将表单数据分割成多个部分,每个部分都有自己的边界,以便服务器可以解析和处理这些部分。Spring框架通过解析这种编码的请求来处理文件上传。 Spring Multipart的核心组件是...

    springcloud处理文件上传

    为了处理文件上传,我们需要确保Zuul支持multipart/form-data类型,因为这是文件上传通常使用的Content-Type。 在Zuul的配置中,我们需要开启对multipart的支持,并配置过滤器来处理文件上传: ```yaml zuul: ...

    关于使用multipart/form-data做文件上传的一点思考

    `SmartUpload.java`很可能是一个自定义的文件上传工具类,它封装了处理`multipart/form-data`请求的逻辑。通常,这样的工具类会包含解析请求、验证文件大小、类型等方法,以确保安全和有效的文件上传。 3. **Smart...

    java springboot 文件上传,多文件上传.zip

    总结,Java SpringBoot实现文件上传主要涉及配置文件设置、创建Controller处理请求、使用`MultipartFile`接口来操作上传文件,并根据实际需求进行文件验证、存储和管理。通过这些步骤,你可以构建出稳定、安全的文件...

    Java Spring文件上传,Java文件上传,Java通用文件上传

    Spring提供了强大的MultipartFile接口,使得处理文件上传变得简单且高效。本文将深入探讨如何使用Java和Spring实现文件上传,以及相关的类和接口。 首先,我们需要了解`MultipartFile`接口。它是Spring MVC中用于...

    Spring MVC 文件上传下载 后端 - Java.zip

    6. **优化**:为了提高性能,可以使用异步处理文件上传和下载,利用Spring MVC的AsyncController或者Servlet 3.0的异步处理特性。另外,对于大文件操作,可以考虑分块上传和下载。 7. **实际应用场景**:这些功能...

    SpringMVC +Spring4.3.12+jackson+文件上传

    实现文件上传时,首先需要配置SpringMVC的MultipartResolver,例如使用CommonsMultipartResolver,确保能够处理multipart/form-data类型的请求。接着,在控制器方法中定义一个`MultipartFile`参数,通过这个参数...

    spring mvc+ajax 导出导入xml文件功能实现和整理

    这里使用FormData对象的原因是它可以支持文件上传,而传统的form表单在处理文件上传时需要设置enctype为multipart/form-data,而这在Ajax请求中是不支持的。 在Ajax请求中,设置了一些关键的选项,比如type为POST...

    spring 文件上传实例

    在Spring MVC中,你需要在`DispatcherServlet`的配置中启用此解析器,以便系统能够识别并处理文件上传请求。 配置文件上传在Spring MVC中主要涉及以下步骤: 1. **配置MultipartResolver**: 在Spring的配置文件...

    spring 文件上传jar包

    在Spring MVC配置中,我们需要启用multipart resolver来处理文件上传。通常,我们会使用`CommonsMultipartResolver`,它是基于Apache Commons FileUpload库的。要在`DispatcherServlet`配置中添加此解析器,需要在`...

    spring mvc ajax异步文件的上传和普通文件上传

    在实际开发中,我们可能会用到Apache Commons IO库(如`CommonsMultipartFile`)来处理文件,或者使用Spring Boot的starter-web依赖,它集成了处理文件上传的功能。 在提供的压缩包文件"springmvc_14_crud"中,可能...

    SpringMVC处理multipart请求的示例代码

    SpringMVC处理multipart请求是指在Web应用程序中上传文件和处理表单数据的过程。multipart请求是一种特殊的HTTP请求,它可以将一个表单拆分为多个部分,每个部分对应一个输入域。在一般的表单输入域中,它所对应的...

    spring mvc上传文件

    在本文中,我们将深入探讨如何使用Spring MVC框架与Ajax技术结合来实现文件上传的功能。Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构模式,用于构建Web应用程序。Ajax(Asynchronous ...

    Spring 文件上传

    在Spring MVC配置中,我们需要开启Multipart支持,并指定处理Multipart请求的配置。这通常在`WebMvcConfigurer`的实现类中完成: ```java @Configuration public class WebConfig implements WebMvcConfigurer { ...

    29. Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot实现文件上传功能,特别是多文件上传。Spring Boot简化了在Java应用程序中处理文件上传的过程,使得开发者能够更专注于业务逻辑,而不是底层的HTTP操作。以下是对该...

    spring boot 实现文件上传

    这将启用Spring Boot对multipart请求(通常用于文件上传)的支持。默认情况下,Spring Boot会自动处理文件大小限制,但你可以自定义这些设置,例如: ```properties # 单个文件的最大大小(以MB为单位) spring....

    spring mvc文件上传实现进度条

    接着,在后端,Spring MVC的控制器需要处理文件上传请求。使用`@RequestParam("file") MultipartFile file`接收文件,但为了实现进度条,我们不能直接处理整个文件,而是需要分块上传。这可以通过Apache Commons IO...

    jersey+spring实例代码(包括文件上传)

    【标题】"jersey+spring实例代码(包括文件上传)"所涉及的知识点主要集中在使用Jersey作为RESTful服务框架与Spring框架集成,并实现文件上传功能。让我们深入了解一下这两个技术及其在实际项目中的应用。 **Jersey**...

    Java Spring Boot应用程序中实现文件上传和下载功能

    本文将详细介绍如何在Spring Boot项目中配置文件上传和下载的相关依赖,以及如何创建处理文件上传和下载请求的Controller。 #### 一、配置文件上传和下载的相关依赖 为了实现文件的上传和下载功能,首先需要在项目...

    详解SpringMVC使用MultipartFile实现文件的上传

    SpringMVC是一个强大的...综上所述,使用SpringMVC和`MultipartFile`可以方便地处理文件上传,而结合FTP服务则可以实现在本地和远程服务器之间的文件传输。理解并掌握这些技术可以帮助开发者构建更健壮的文件管理系统。

Global site tag (gtag.js) - Google Analytics