SpringMVC 单个文件上传及调用 文件的上传 文件的调用

SpringMVC 在实际使用中很容易碰到文件上传服务器及调用服务器文件的需求,我在开发项目的时候也碰到了这个问题。我将以 JPG 格式的图片为例来介绍这两个功能的实现。

1.form 标签的设置
首先,要更该 form 标签的属性(重点是 enctype 与 method 需如代码所示。):

<form action="" enctype="multipart/form-data" method="post">

我建议用 Submit 的方式提交表单,因为我比较懒☺。

2.Controller 的处理
先贴上代码:

    @RequestMapping(value = "/receiveFiles", method = {RequestMethod.POST})
    @Transactional
    public String ReceiveFiles(HttpServletRequest request,UploadedImageFile file) throws Exception {
        //图片上传至服务器并保存图片路径
        if(!file.getPhoto().isEmpty())
        {
            //防止图片重复,对图片进行重命名
            String name = RandomStringUtils.randomAlphanumeric(10);
            String newFileName = name + ".jpg";
            //根据 request 获取服务器绝对路径,并新建一个空白文件
            File newFile = new File(request.getServletContext().getRealPath("/upload"), newFileName);
            newFile.getParentFile().mkdirs();
            //将上传图片保存至空白文件
            file.getPhoto().transferTo(newFile);
            //保存图片名称(保存在某个对象中,还是某个文件中需要你自己实现,调用该文件时要用到)
            savaDirs(newFileName);
        }
        //重定向
        return "your direct";
    }

主要是图片保存到一个指定的路径下,我是指定为 “/upload” 下,然后只要保存好图片的名字,等会儿就能方便调用了。

3.springMVC.xml 的配置

    <!-- 配置多媒体文件解析器,开启文件上传 -->
    <!-- 文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB,最小单位为字节-->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>

以上就是图片的上传。

文件的调用

1.springMVC.xml 的配置

    <!--静态资源解析包括 :js、css、img、..-->
    <!--<mvc:resources mapping="/js/" location="/js/**"/>-->
    <!--<mvc:resources mapping="/css/" location="/css/**"/>-->
    <!--<mvc:resources mapping="/fonts/" location="/fonts/**"/>-->
    <!--加载静态资源(images)-->
    <mvc:resources mapping="/images/" location="/upload/**"/>
    <mvc:default-servlet-handler/>

需要配置 mvc:resources 来进行静态资源的访问。

2.web.xml 的配置

      <!--在默认情况下允许访问jpg静态资源,必须加在springmvc的servlet之前-->
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
      </servlet-mapping>

web.xml 也需配置正确,不然 jpg 文件还是可能访问不到。

3.Img 标签的设置
就和正常调用图片的方式一样,只要给出完整的路径就可以了,我使用的是 EL 表达式来拼接路径

<img src="${pageContext.request.contextPath}/upload/${uploadImg.name}" id="uploadImg"/>

其中, ${uploadImg.name} 的 uploadImg 是我传给网页的一个自定义对象,你的自定义对象取决于你自己想怎么实现。
以上,就是全部内容。