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

Spring Web MVC 文件上传下载

阅读更多

 

 

 准备工作


Spring Web MVC也是使用Apache的common-fileupload,因此要在lib里面添加如下的jar包:
commons-fileupload-1.2.2.jar、commons-io-2.4.jar
 
为了处理中文文件名称的上传下载,把前面HelloWorld讲过的filter配置上
在Spring的配置文件中,配置处理文件上传的bean,如下:

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

 
配置上就好了,Spring会自动找的

文件上传示例,先看Controller部分,这里只是一个最基本的演示:

 

@Controller
@RequestMapping(value = "/fileope")
public class FileUploadController {
@RequestMapping(value = "upload", method = RequestMethod.POST)
  public String upload(          
          HttpServletRequest request, @RequestParam(value = "myFile", required = false) MultipartFile[] files) {
          try {
          for(int i=0;i<files.length;i++){
          FileUploadUtils.upload(request, files[i]);
          }
 
} catch (Exception e) {
e.printStackTrace();
}
          return "success";
  }
}
 
对应使用的FileUploadUtils:
public class FileUploadUtils {
    //默认大小 50M
    public static final long DEFAULT_MAX_SIZE = 52428800;
    //默认上传的地址
    public static  String defaultBaseDir = "upload";
 
    public static final String upload(HttpServletRequest request, MultipartFile file)throws Exception{
        String filename = extractFilename(file, defaultBaseDir);
        File desc = getAbsoluteFile(extractUploadDir(request), filename);
        file.transferTo(desc);
        return filename;
    }
    private static final File getAbsoluteFile(String uploadDir, String filename) throws IOException {
        if(uploadDir.endsWith("/")) {
            uploadDir = uploadDir.substring(0, uploadDir.length() - 1);         }
        if(filename.startsWith("/")) {
            filename = filename.substring(0, uploadDir.length() - 1);        }
        File desc = new File(uploadDir + "/" + filename);
        if(!desc.getParentFile().exists()) {
            desc.getParentFile().mkdirs();        }
        if(!desc.exists()) {
            desc.createNewFile();        }
        return desc;
    }
  
 
   public static final String extractFilename(MultipartFile file, String baseDir) throws UnsupportedEncodingException {
        String filename = file.getOriginalFilename();
        int slashIndex = filename.indexOf("/");
        if (slashIndex >= 0) {
            filename = filename.substring(slashIndex + 1);
        }
        filename = baseDir + "/" + filename;
        return filename;
    }
    public static final String extractUploadDir(HttpServletRequest request) {
        return request.getServletContext().getRealPath("/");
    }
}   

 

上传的示例页面

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<form action="/mvcexample/fileope/upload" method="post" enctype="multipart/form-data">
file1:<input type="file"  name="myFile"/>
<br>
file2:<input type="file"  name="myFile"/>
<br>
<input type="submit" value="上传">
</form>

 


文件下载

下载的示例Controller的方法

@RequestMapping(value = "download", method = RequestMethod.GET)
public static void download(HttpServletRequest request,
      HttpServletResponse response, String fileName) throws Exception {
  response.setContentType("text/html;charset=UTF-8");
  request.setCharacterEncoding("UTF-8");
  BufferedInputStream bis = null;
  BufferedOutputStream bos = null;
  String newFileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
  String ctxPath = request.getSession().getServletContext()
          .getRealPath("/")  + FileUploadUtils.defaultBaseDir;
  String downLoadPath = ctxPath +"/"+ newFileName;
  long fileLength = new File(downLoadPath).length();
  response.setHeader("Content-disposition", "attachment; filename="
          + new String(newFileName.getBytes("gb2312"), "ISO8859-1"));
  response.setHeader("Content-Length", String.valueOf(fileLength));
  bis = new BufferedInputStream(new FileInputStream(downLoadPath));
  bos = new BufferedOutputStream(response.getOutputStream());
  byte[] buff = new byte[2048];
  int bytesRead;
  while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
      bos.write(buff, 0, bytesRead);
  }
  bis.close();    bos.close();
} 

 

分享到:
评论

相关推荐

    Spring Web MVC入门教程

    文件上传和下载功能是Web应用中常见的需求之一,Spring Web MVC通过MultipartResolver组件提供了对文件上传的支持。对于表单标签的支持,Spring Web MVC不仅简化了传统JSP标签的使用,还扩展了表单相关的处理能力。 ...

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

    这个压缩包文件"Spring MVC 文件上传下载 后端 - Java.zip"包含的文档可能详细阐述了如何在Java后端实现这些功能。以下是关于Spring MVC中文件上传和下载的关键知识点: 1. **Spring MVC 框架**:Spring MVC是...

    spring-webmvc.rar

    这个"spring-webmvc.rar"压缩包包含了Spring Web MVC的源代码,允许开发者深入理解其内部机制,这对于学习和调试Spring应用非常有帮助。下面我们将详细探讨Spring Web MVC的关键知识点。 1. **MVC架构**:Spring ...

    Spring MVC 文件上传下载

    Spring MVC 是一个强大的 web 应用开发框架,它提供了丰富的功能来处理用户请求,包括文件上传和下载。本文将深入探讨如何使用 Spring MVC 实现文件的上传与下载。 首先,要实现文件上传,我们需要引入一些必要的...

    Mastering Spring Webmvc

    《精通Spring Web MVC》 Spring Web MVC是Spring框架的核心组件之一,它为构建基于Java的Web应用程序提供了模型-...通过阅读《Mastering Spring Webmvc》及参考博文,可以深入理解Spring MVC的内部机制和最佳实践。

    Spring MVC文件上传下载

    在Spring MVC中,文件的上传和下载是常见的功能需求,这涉及到客户端与服务器之间的数据传输。本篇文章将深入探讨Spring MVC如何实现文件上传和下载。 ### 文件上传 1. **依赖配置**:在Spring MVC项目中,为了...

    深入浅出学Spring_Web_MVC

    10. **文件上传下载**:熟悉文件上传下载的实现细节。 11. **表单标签**:了解Spring Web MVC提供的JSP标签库。 #### 四、总结 Spring Web MVC 是一个功能强大且灵活的Web框架,它不仅能够帮助开发者构建高质量的...

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    Spring MVC实现文件的上传下载

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它在Spring框架的基础上,为...开发者可以通过此副本学习和理解Spring MVC项目的组织方式,以及文件上传下载功能的实现细节。

    spring mvc上传文件

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

    精通Spring_Web_MVC优秀框架.pdf

    - **文件上传下载**:了解如何在Spring Web MVC中处理文件上传和下载操作。通常需要使用`MultipartFile`来接收上传文件,以及通过响应实体对象实现文件下载。 - **表单标签**:Spring Web MVC提供了一套强大的表单...

    spring mvc文件上传下载实例

    这篇博客“spring mvc文件上传下载实例”将引导我们如何在Spring MVC项目中实现这两个功能。 首先,我们需要理解Spring MVC的基本概念。Spring MVC是Spring框架的一个模块,它提供了处理HTTP请求并返回响应的能力,...

    Spring Web MVC外文翻译.zip

    12. **上传和下载**:Spring MVC提供了处理文件上传和下载的功能,使得在Web应用中集成这些功能变得简单。 13. **RESTful API设计**:Spring MVC的注解驱动特性使得创建符合REST原则的API变得容易,如使用`@...

    spring mvc 文件上传 代码完整版

    在Spring MVC中实现文件上传,首先需要在`web.xml`配置文件中添加MultipartResolver,通常是`CommonsMultipartResolver`,这是Spring MVC处理文件上传的关键组件。它依赖于Apache Commons FileUpload库,需要将其...

    Spring mvc 教程

    - **Servlet 3.0 下的 MultipartResolver**:对于 Servlet 3.0 及以上版本,Spring MVC 提供了内置的文件上传支持。 - **处理表单中的文件上传**:通过控制器方法来接收和处理上传的文件。 #### 异常处理 ...

    spring MVC 上传 &下载

    #### 二、Spring MVC文件上传配置 为了使Spring MVC能够处理文件上传,首先需要在Spring MVC的配置文件中添加相应的配置。这里以`springmvc-servlet.xml`为例: 1. **引入必要的命名空间**:确保配置文件包含了`...

    spring mvc 附件上传代码

    本文档将详细介绍如何在Spring MVC环境中配置并实现文件上传功能,包括必要的`web.xml`配置、Spring配置文件(如`upload-servlet.xml`)设置及控制器的具体编写。 #### 二、`web.xml`配置详解 `web.xml`文件用于...

    spring-webmvc-4.08jar包及相关jar包

    这个"spring-webmvc-4.0.8jar包及相关jar包"包含了Spring MVC 4.0.8版本及其依赖的库,这对于那些在旧项目中使用这个特定版本的开发者来说是非常宝贵的资源。以下将详细介绍Spring Web MVC的关键知识点,以及可能...

    Spring MVC文件上传

    在Spring MVC框架中,文件上传是一项常见的功能,它允许用户通过Web界面上传本地文件到服务器。这篇文章将深入探讨如何在Spring MVC中实现文件上传,并基于提供的链接和文件名称列表进行详细解析。 首先,理解文件...

Global site tag (gtag.js) - Google Analytics