springmvc上传文件

1 配置虚拟路径

方法一:修改tomcat的配置文件

tomcat上配置图片虚拟目录,在tomcatconf/server.xml中添加:

<Context docBase="D:\develop\upload\temp" path="/pic" reloadable="false"/>

访问http://localhost:8080/pic即可访问D:\develop\upload\temp下的图片。

方法二:通过eclipse配置

复制一张图片到D盘下面的upload问价夹里面,然后使用浏览器访问。

网址为:http://localhost:8080/pic/图片名称(包括后缀名)

2 加入jar包

实现图片上传需要加入的jar包,如下图:

把两个jar包放到工程的lib文件夹中

3 配置上传解析器

 springmvc.xml中配置文件上传解析器

<!-- 文件上传,id必须设置为multipartResolver -->
<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设置文件上传大小 单位是B 5M=5*1024*1024 -->
    <property name="maxUploadSize" value="5242880" />
</bean>

 

 

4 准备jsp页面

这里我准备两个jsp页面,1个用于文件上传,另外一个用于上传的图片的回显。

1 fileupload.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>FileUpload</title>
</head>
<body>
    <form action="${pageContext.request.contextPath }/file/upload.action" 
          method="post" enctype="multipart/form-data">
          <input type="file" name="filename">
          <input type="submit" value="上传">
    </form>
</body>
</html>

2 uploadsuccess.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>${msg}</h1>
    <div style="width: 600px;height: 480px;border:2px solid green" >
        <img alt="图片获取失败" src="/pic/${pictureName}"
         style="width: 100%;height: 100%">
    </div>
</body>
</html>

5 图片上传FileController

package com.test.springmvc.controller;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import javax.jws.WebParam.Mode;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileController {

    @RequestMapping(value="/file/upload.action")
    public void fileUpload(HttpServletRequest request,
            HttpSession session,
            HttpServletResponse response, 
            MultipartFile filename) throws Exception{

        /* 图片上传
         * 
         * 首先应该判断是否上传了图片,如果没有上传图片的话。
         * oriName为[].然后执行oriName.lastIndexOf(".")将会抛出异常。
         */
        if(!filename.isEmpty()){ //上传了图片
            // 设置图片名称,不能重复,可以使用uuid
            String picName =UUID.randomUUID().toString().replaceAll("-", "");
            
            // 获取文件名
            String oriName = filename.getOriginalFilename();
            // 获取图片后缀
            String extName = oriName.substring(oriName.lastIndexOf("."));

            // 开始上传.需要注意E:/upload/路径必须存在,不然会抛出异常
            filename.transferTo(new File("E:/upload/" + picName + extName));
            
            //上传后的图片名称
            String pictureName = picName+extName;
            
            //图片名称放入域中,同时返回上传成功了的提示
            session.setAttribute("pictureName", pictureName);
            session.setAttribute("msg", "图片上传成功了");
            //重定向图片回显的jsp页面
            response.sendRedirect(request.getContextPath()+"/uploadsuccess.jsp");
        }else{//没有上传图片
            session.setAttribute("msg", "你没有选择上传的图片");
            //重定向图片回显的jsp页面
            response.sendRedirect(request.getContextPath()+"/uploadsuccess.jsp");
        }
    }
}

 

6 测试

 

 

posted @ 2018-05-15 00:48  Jepson6669  阅读(187)  评论(0编辑  收藏  举报