SSM+form表单文件上传

这里介绍SSM如何配置上传文件

配置springmvc.xml:

  <!--配置上传下载-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />

以及在WEB-INF下面的web.xml配置文件的相关设置

<servlet>节点里面
-1表示默认
 <!--配置上传文件大小-->
    <multipart-config>
      <max-file-size>-1</max-file-size>
      <max-request-size>-1</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>

然后来个添加图片的示例

Controller

 
//图片上传
    @RequestMapping(value = "/addPicture", method = RequestMethod.POST)
    public String addPicture(MultipartFile img, Model model, HttpServletRequest request) {
        ArrayList<String> strings = new ArrayList<>();
        //得到上传文件实际路径
        String realPath = request.getServletContext().getRealPath(File.separator + "imges");
        if (img.isEmpty()) {
            strings.add("请选择文件!");
        }
        //得到文件的类型
        String fileType = img.getContentType();
        //第一种方式Arrays.asList("image/jpeg","image/png")
        if (!fileType.contains("image/")) {
            strings.add("只允许上传图片!");
        }
        //只允许上传的图片小于5MB
        if (img.getSize() > 1024 * 1024 * 1024 * 5) {
            strings.add("只允许上传5M的图片!");
        }
        if (!strings.isEmpty()) {
            model.addAttribute("errs", strings);
            return "empAdd";
        }
        try {
            String[] formatName = getFormatName(img.getOriginalFilename());
            img.transferTo(new File(realPath + File.separator + formatName[0] + formatName[1] + formatName[2]));
       //想要得到图片的相对路径/方法体返回的数组拼接在一起即可保存到数据库。 }
catch (IOException e) { e.printStackTrace(); } return "empAdd"; } public String[] getFormatName(String fileName) { //设置日期格式yyyy-MM-dd SimpleDateFormat df = new SimpleDateFormat("_yyyyMMddHHmmss"); // new Date()为获取当前系统时间 String now = df.format(new Date()); //获得文件名去掉后缀 String prefix = fileName.substring(0, fileName.lastIndexOf(".")); //得到文件后缀带. String postfix = fileName.substring(fileName.lastIndexOf(".")); return new String[]{prefix, now, postfix}; }

jsp方面

需要注意的是,一定要写 enctype="multipart/form-data",否则springmvc就会解析失败。这个的作用就是将form表单的数据以二进制的方式传输。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<div style="margin:auto">
    <form:form action="/addPicture" method="post" enctype="multipart/form-data">
        <input type="file" name="img" />
        <input type="submit"/>
    </form:form>
</div>
错误信息显示:
<c:forEach items="${errs}" var="e">
<div>${e}</div>
</c:forEach>

jQuery+ajax方式

<input type="file" id="fff"/>
<input type="button" id="gg" value="提交测试"/>
  //ajax上传文件
    $("#gg").on("click", function () {
        var data = new FormData();
        data.append("aaa", "第一个数据");
        data.append("file", document.querySelector("#fff").files[0]);
        $.ajax({
            url:"/getFile",
            method:"post",
            contentType:false,
            data:data,
            processData:false
        });
    });

后台代码

 @RequestMapping(value = "/getFile" ,method = RequestMethod.POST)
    public String gg(MultipartFile file, String aaa){
        System.out.println(file.getOriginalFilename()+"___"+aaa);
        return "{"msg":"succeed"}";
    }

具体后台实现同上。。。

原文地址:https://www.cnblogs.com/dzcici/p/9896365.html