栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC框架的文件上传

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC框架的文件上传

SpringMVC框架的文件上传

SpringMVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过SpringMVC框架在原有文件上做了进一步的封装,简化了文件上传代码的实现,取消了不同上传组件上的编程差异。

commons是Apache开源代码组织中的一个Java子项目,该项目包括文件该项目包括文件的上传、命令行处理、数据库连接池、XML配置文件处理等模块,fileupload就是用来处理基于表单的文件上传的子项目,commos-fileupload组件性能优良,并支持任意大小文件的上传。

标签会在浏览器中显示一个输入框和一个按钮,输入框可共用户填写本地文件命和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。

对于基于表单的文件上传,需要设置enctype属性,并将它设置为multipart/form-data,同时将表单的提交方式设置为post。

表单的enctype属性指定表单数据的编码方式,其中multipart/form-data该编码方式以二进制的方式来处理表单数据,并将文件指定的文件内容封装到请求参数中。

MultipartFile接口,在SpringMVC框架中上传文件时将文件相关信息及操作封装到MultipartFile对象中,因此开发者只需要使用MultipartFile类型声明模型类的一个属性即可对被上传文件进行操作。

下面学习一个单文件上传的案例

1-创建web应用并导入相关jar包。
2-在web.xml部署DispatcherServlet,用于总体控制,同时需要添加字符编码过滤器。



    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            WEB-INF/springmvc-servlet.xml
        
        
        1
    
    
        springmvc
        
        /
    

    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter

        
        
            encoding
            UTF-8
        
    
    
        CharacterEncodingFilter
        
public class FileDomain {
    private String description ;
    private MultipartFile myFile ;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public MultipartFile getMyFile() {
        return myFile;
    }

    public void setMyFile(MultipartFile myFile) {
        this.myFile = myFile;
    }
}

5-在src目录下创建了controller包,在该包中创建FileUploadController控制器类,在该控制器类中完成文件上传。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.FileDomain;

import javax.servlet.http.HttpServletRequest;
import java.io.File;

@Controller
public class FileUploadController {
    @RequestMapping("/onefile")
    public String oneFileUpLoad(@ModelAttribute FileDomain fileDomain, HttpServletRequest request){
        String realpath = request.getServletContext().getRealPath("/uploads/") ; //上传的位置
        String fileName = fileDomain.getMyFile().getOriginalFilename() ; //获取上传的文件名称
        File targetFile = new File(realpath, fileName) ;//以路径名和文件命创建文件
            if(!targetFile.exists()){ //如果目标文件不存在,则创建目录
                targetFile.mkdirs() ;
        }
        //目标文件存在,则上传文件
        try {
            fileDomain.getMyFile().transferTo(targetFile);
        }catch(Exception e){
            e.printStackTrace();
        }
        return "showOne" ;
    }
}

6-在WEB-INF创建配置文件springmvc-servlet.xml,在该配置文件中扫描指定包,使得注解生效,配置视图解析器,使用Spring的CommonsMultipartResolver配置multipartResolve用于文件上传。




    
    
    

    
    
        
        
        
        
    

    
    
    
    




7-在WEB-INF目录下创建JSP文件夹,在该文件夹中创建视图显示页面showOne.jsp

<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/10/2
  Time: 10:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


${fileDomain.description}
${fileDomain.myFile.originalFilename}

下面学习SpingMVC框架的多文件上传的案例
1-在web目录下创建JSP页面multiFile.jsp,该页面使用表单上传多个文件。

<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/10/2
  Time: 14:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


选择文件1:
文件描述1:
选择文件2:
文件描述2:
选择文件3:
文件描述3:

2-在pojo包中创建MultiFileDomain类用于封装文件信息。

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public class MultiFileDomain {
    //该类用于封装文件信息
    private List description ;
    private List myfile ;

    public List getDescription() {
        return description;
    }

    public void setDescription(List description) {
        this.description = description;
    }

    public List getMyfile() {
        return myfile;
    }

    public void setMyfile(List myfile) {
        this.myfile = myfile;
    }
}

3-在控制器类中添加多文件上传处理方法multiFileUpload.

  //添加多文件上传处理的方法
    @RequestMapping("/multifile")
    public String multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain, HttpServletRequest request){
        String realpath = request.getServletContext().getRealPath("uploadfiles") ;
        File targetDir = new File(realpath) ;
        if(!targetDir.exists()){
            targetDir.mkdirs() ;
        }
        List files = multiFileDomain.getMyfile() ;
        for(int i=0; i 

4-在jsp文件夹中创建文件显示页面showMulti.jsp

<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/10/2
  Time: 14:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



        
详情 文件名
${description} ${multiFileDomain.myfile[loop.count - 1].originalFilename}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号