专栏首页五毛程序员Maven+SpringMVC+MyBatis 上传图片

Maven+SpringMVC+MyBatis 上传图片

  上传文件我一直都觉得很难,好吧,所有涉及文件操作的我都觉得不容易。然后今天尝试了从网页上传图片保存到服务器。这个例子的前提是搭建好了服务器端框架:Maven+Spring MVC+MyBatis。当然必要的准备我也要提及。

  首先是jar包,上传文件必不可少的jar包:commons-fileupload和commons-io。这两个是apache的开源jar包。

  Maven配置:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

  有了这两个jar包基本上就行了。

  还有一个准备工作是对SpringMVC上传文件的配置:

<!-- 对上传文件的配置 -->
<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding">
        <value>UTF-8</value>
    </property>
    <property name="maxUploadSize">
        <value>32505856</value><!-- 上传文件大小限制为31M,31*1024*1024 -->
    </property>
    <property name="maxInMemorySize">
        <value>4096</value>
    </property>
</bean>

  接下来是上传文件的jsp页面,当然一般的html页面也是可以的。特别要注意的是,form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。否则会上传不了,会报错的。

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html>
 4 <html lang="en">
 5 <head>
 6     <meta charset="UTF-8">
 7     <title>Document</title>
 8 </head>
 9 <body>
10     <form action="appuser/uploadHeadPhoto.do"
11     method="POST" enctype="multipart/form-data" >
12         <input type="file" name="headPhotoFile">
13         <input type="text" name="userId" value="1" readonly>
14         <button type="submit" value="提交">提交</button>
15     </form>
16 </body>
17 </html>

  后台Controller处理文件上传的接口,主要过程是获取文件二进制流,然后写入新创建的jpg,返回新创建的jpg的地址,将地址写入数据库。数据库里面最终存放的jpg图片路径是D:\Program Files\apache-tomcat-7.0.62\webapps\springmvcImage\14386803406181764242780.jpg。

 1 @RequestMapping("/uploadHeadPhoto")
 2     public String uploadHeadPhoto(@RequestParam MultipartFile headPhotoFile, HttpServletRequest request) throws IOException{
 3         String userId = request.getParameter("userId");
 4         
 5         if(headPhotoFile.isEmpty()){
 6             System.out.println("文件未上传");
 7         }else{
 8             String contentType = headPhotoFile.getContentType();
 9             System.out.println(contentType);//输出image/jpeg
10             if(contentType.startsWith("image")){
11                 //获取Web项目的全路径
12                 String realPath = request.getSession().getServletContext().getRealPath("/");
13                 System.out.println(realPath);//输出D:\Program Files\apache-tomcat-7.0.62\webapps\springmvc\
14                 realPath = realPath.replace("springmvc", "springmvcImage");
15                 realPath.concat("user");
16                 String newFileName = new Date().getTime()+""+new Random().nextInt()+".jpg";
17                 FileUtils.copyInputStreamToFile(headPhotoFile.getInputStream(), new File(realPath, newFileName));
18                 
19                 //将图片路径插入数据库
20                 Map<String, Object> requestMap = new HashMap<String, Object>();
21                 requestMap.put("userId", userId);
22                 requestMap.put("headPhoto", realPath+newFileName);
23                 int flag = userService.uploadHeadPhoto(requestMap);
24                 if(flag!=0&&flag!=-1){
25                     System.out.println("success");
26                     return "success";
27                 }
28             }
29         }
30         
31         return null;
32     }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java反射机制入门01

    用户1737026
  • 写后台SQL的一些心得

    用户1737026
  • 从0开始搭建自动部署环境

    用户1737026
  • JAVA不可变类(immutable)机制与String的不可变性

    不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。 可...

    lyb-geek
  • 这 5 道 Java 面试题,你还真不一定懂。

    而 StringBuffer 和 StringBuilder 都继承于 AbstractStringBuilder,不过在 AbstractStringBui...

    帅地
  • 如何在DevOps引入自动化测试

    自动化测试是一项艰巨的技术活动,如果没有有效实施,它就有能力破坏项目的总体DevOps策略。

    八音弦
  • 微服务架构下的测试之道

    1.系统架构的演变 伴随着互联网的快速发展,Web应用系统从面向企业内部发展到面向市场用户,业务的日趋复杂以及用户量的上升,那些曾经工作良好的单体应用开始遇到...

    架构师小秘圈
  • 谷歌为G Suite添加NLP功能,提高搜索效率并推荐相关内

    对于G Suite客户来说,这是个好消息:谷歌正在向Docs,Sheets和Slides工作流注入一些自然语言处理(NLP)。The Mountain View...

    AiTechYun
  • 中移物联网软件测试面试心路历程

     做了一两年的功能测试后,突发发现能胜任全部工作,在已有的公司已经得不到任何技能方面的提升后。准备跳槽,说一下跳槽面试遇到的问题吧。

    小老鼠
  • Vue 应用单元测试的策略与实践 05 - 测试奖杯策略

    前言从敏捷:团队和企业的高响应力谈到单元测试,可能有同学会问,高响应力这个事情我认可,也认可快速开发的同时,质量也很重要。但是,为了达到“保障质量”的目的,不一...

    JimmyLv_吕靖

扫码关注云+社区

领取腾讯云代金券