zoukankan      html  css  js  c++  java
  • springMVC中上传图片

    上传图片,很常见的问题,基本每个人都会遇到,但是个人认为在springMVC中上传图片相对来说是比较简单的,因为框架已经帮我们做好了许多事情。

    这篇文章所用的环境:spring4.3.3 、jdk1.8 、eclipse。

    环境准备

    如果项目中没有导入以下jar包请先导入,这里有:http://download.csdn.net/download/u011403655/8559545

    commons-fileupload-1.2.2.jar

    commons-io-2.4.jar

    springmvc.xml配置文件中配置插件

    在springmvc.xml中加入这一个配置,可以配置文件上传的最大限制。

    <!-- 文件上传 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize">
                <value>5242880</value>
            </property>
        </bean>

    form中加入一个属性enctype="multipart/form-data"

    <form action="${pageContext.request.contextPath}/addPet.action" method="post" enctype="multipart/form-data">
      <
    input type="file" required="required" name="pic" id="exampleInputFile">
    ...

    注意这里的input,name属性是pic,可以直接映射到controller方法的同名参数中。

    controller中的方法

    @RequestMapping("addPet.action")
    public
    ModelAndView addPet(String name, double price, String introduce, MultipartFile pic, String classifyName) throws IllegalStateException, IOException {
      if (!pic.isEmpty()) {
                String path = "E:\宠物网站\image\";
                String originalFileName = pic.getOriginalFilename();
                // 新的图片名称
                String newFileName = UUID.randomUUID() + originalFileName.substring(originalFileName.lastIndexOf("."));
                // 新的图片
                File newFile = new File(path + newFileName);
                // 将内存中的数据写入磁盘
                pic.transferTo(newFile);
            }

    这里的控制器中的方法参数是 MultipartFile pic,和表单元素中的name是一一对应的,新的文件命名用UUID生成字符串避免文件名重复,同时截取图片的后缀名;最后再把图片写到磁盘上去。到此,就完成了图片的上传。

    图片在页面中的显示

    web程序是在tomcat中运行的,但是这里的图片是放到了本地的磁盘上的,怎么通过tomcat访问到呢?这篇文章是eclipse,在eclipse中可以配置,双击打开tomcat:

    选择modules--->Add Extenal Web Modules--->Document base (就是图片存放在磁盘上的绝对路径),path就是在tomcat中访问的路径,我这里用的是 /image,通过这样的配置,在tomcat中通过 localhost:8080/image/图片名称全称 就能访问到图片。

     

    测试一下,在浏览器中如果通过上述url能访问到图片就说明配置成功。这样在jsp页面中的图片的路径就要写成 src="/image/图片全称"才能访问到图片,不能再加上项目名了。

     其实上述的配置过程就是在tomcat中添加了一些配置,配置了一个虚拟目录,如果没有用eclipse,或者嫌eclipse手动配置麻烦,其实可以通过在server.xml中进行配置,在<Host></Host> 中间加入如下配置:

    <Context docBase="E:宠物网站image" path="/image" reloadable="true"/>
  • 相关阅读:
    Array之foreach
    gulp之gulp-uglify模块的大坑-------------默认不支持IE8
    Only the original thread that created a view hierarchy can touch its views
    android 组件隐藏
    android 字体加粗
    android studio 创建图标
    Can't create handler inside thread that has not called Looper.prepare()
    Failed to connect to /127.0.0.1:8080
    socket failed: EACCES
    android 无法import
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/6901353.html
Copyright © 2011-2022 走看看