SpringMvc的MultipartFile上传文件小结

Posted 开发菜鸟成长记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMvc的MultipartFile上传文件小结相关的知识,希望对你有一定的参考价值。

SpringMvc的MultipartFile上传文件小结

开发中用到对图片、文件等上传到服务器还是很常见的,下面就来简单介绍一下用MultipartFile上传文件到服务器,并将路径及文件名保存到数据库中,并在jsp页面上显示出来

代码示例

要使用multipartfile就要确保你引了jar包和在配置文件中已经配置好了呦!

  • 需要用到上传文件的两个jar包 commons-logging.jar、commons-io.jar

  • 以下是配置文件:

 
   
   
 
  1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

首先在jsp页面上需要有上传文件的标签,具体参考一下示例:

 
   
   
 
  1. <form action="${pageContext.request.contextPath }/title/addTitle/" method="post" id="titleaddform" name="titleaddform" enctype="multipart/form-data">

  2.    <div class="sxk_zz_input">

  3.         主题名称<input type="text" name="titlename" id="titlename" style="width: 340px;">

  4.         主题图片<input type="file" name="uploadFile" id="uploadFile" style="width: 340px;">

  5.    </div>

  6.    <div class="sxk_zz_con_btn">

  7.         <input type="button" value="确定" class="sxk_bc" onclick="saveTitle()">

  8.         <input type="button" value="取消" class="sxk_qx">

  9.    </div>

  10. </form>

需要注意的有

  • form表单中属性必须有enctype="multipart/form-data"

  • 提交的表单中如果有文件,必须走action中的方法

  • 上传文件标签的name必须与后台接收的参数名字相同,并不能在pojo中定义相同的名称

  • 如果提交前需要有校验,或必须走js中的方法可以用onclick,具体可参照以下示例:

 
   
   
 
  1. function saveTitle(){

  2.    var titlename=$("#titlename").val();

  3.    if(titlename==""||titlename==null){

  4.        alert();

  5.        }else{

  6.        $.post('<%=path%>/title/queryTitleByName', {titlename:titlename}, function(result) {

  7.            if(result){

  8.                titleaddform.submit();

  9.            }else{

  10.                $("#titlename").val("");

  11.                $(".warm_queding").show();

  12.                $("#warm").html("主题已存在!");

  13.        }

  14.        }, 'json');            

  15.    }

  16.    }

pojo中定义的属性:因为数据库中存的为路径,所以定义成String就可以啦!

 
   
   
 
  1. private String titleid;

  2. private String titlename;

  3. private String imageUrl;

  4. private String imageName;

在controller中的方法,参考以下示例:

 
   
   
 
  1. @RequestMapping("/addTitle")

  2. public ModelAndView saveTitle(TTitle title,@RequestParam(value = "uploadFile", required = false) MultipartFile[] uploadFile,HttpServletRequest request)throws Exception{

  3.    ModelAndView mav = new ModelAndView();

  4.    if (uploadFile != null){

  5.        for (MultipartFile file : uploadFile) {

  6.            titleManager.upload(file, title, request);

  7.         }

  8.    }

  9.    mav.setViewName("views/font/title/title");

  10.    return mav;

  11.    }

上传文件的service

 
   
   
 
  1. /**

  2. * 文件上传

  3. */

  4. public void upload (MultipartFile uploadFile,TTitle title,HttpServletRequest request) throws Exception{

  5.    String filePath="";

  6.        String newfilename="";

  7.    if (!uploadFile.isEmpty()) {

  8.        try {

  9.            String imagename = uploadFile.getOriginalFilename();

  10.            int pos = imagename.lastIndexOf(".");

  11.            String houzhui = imagename.substring(pos);//后缀名

  12.            SimpleDateFormat sd = new SimpleDateFormat("yyyyMMddHHmmss");

  13.            // 新的文件名

  14.            newfilename = imagename.substring(0, pos) + sd.format(new java.util.Date())+houzhui;

  15.            //String path = System.getProperty("user.dir") + "/upload/file/";

  16.            // 在处理图片上传的方法中用以下方式获取服务器中保存图片的文件夹路径:

  17.            String path = request.getSession().getServletContext().getRealPath("upload");

  18.            System.out.println("===================="+path);

  19.            File dir = new File(path);

  20.            // 创建目录

  21.            if (!dir.exists()) {

  22.                dir.mkdirs();

  23.            }

  24.            // 根据获取的图片名称和保存路径,生成待写入内存的图片文件:

  25.            filePath = (path +"/"+ newfilename).replace(" ", "");//去除文件名称的空格

  26.            // 将待写入的图片文件写入内存磁盘:

  27.            uploadFile.transferTo(new File(filePath));

  28.        } catch (IOException e) {

  29.            e.printStackTrace();

  30.        }

  31.    }

  32.    //获取文件上传信息

  33.    title.setImageUrl(filePath);

  34.    title.setImageName(newfilename);

  35.    title.setUpdateDate(new Date());

  36.    // 保存

  37.    save(title);

  38.    return;

  39. }

如果图片要在jsp页面上显示出来,要在jsp页面的首部添加如下示例,获取当前jsp文件所在路径代码

 
   
   
 
  1. <%  

  2. String path = request.getContextPath();  

  3. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  

  4. %>  

head标签首部添加:

 
   
   
 
  1. <base href="<%=basePath%>">

显示当前图片

 
   
   
 
  1. <img src="upload/'+imageName+'" width=50 height=50/>


呼~第一次写,好累呀,希望可以对你有所帮助!


以上是关于SpringMvc的MultipartFile上传文件小结的主要内容,如果未能解决你的问题,请参考以下文章

springMVC实现 MultipartFile 多文件上传,StandardMultipartHttpServletRequest上传文件,在请求中上传文件,比如上传图片

springmvc 多文件上传 MultipartFile 怎么获取前台传过来的参数

文件上传(MultipartFile)

已解决SpringMvc上传文件,但是使用Multipartfile接收到文件后发现文件变大,且文件打不开

MultipartFile(文件的上传)--CommonsMultipartResolver

spring boot MultipartFile[]文件上传