我爱Java系列---SpringMVC传统方式的文件上传和前端获取数据库图片在页面显示
Posted hujunwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我爱Java系列---SpringMVC传统方式的文件上传和前端获取数据库图片在页面显示相关的知识,希望对你有一定的参考价值。
一、文件上传
说明:传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。
并且上传完成之后,浏览器可能跳转。
1. 第一步:创建 maven 工程并导入 commons-fileupload 坐标
1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.3.1</version> 5 </dependency>
2. 第二步:编写 jsp 页面
简单案例演示:
1 <form action="/fileUpload" method="post" enctype="multipart/form-data"> 2 图片:<input type="file" name="image"/><br/> 3 <input type="submit" value="上传"/> 4 </form
上传产品的图片案例演示:
1 <form action="$pageContext.request.contextPath/product/save" 2 method="post" enctype="multipart/form-data"> 3 <!-- 正文区域 --> 4 <section class="content"> <!--产品信息--> 5 6 <div class="panel panel-default"> 7 <div class="panel-heading">产品信息</div> 8 <div class="row data-type"> 9 10 <div class="col-md-2 title">产品名称</div> 11 <div class="col-md-4 data"> 12 <input type="text" class="form-control" name="name" 13 placeholder="产品名称" value=""> 14 </div> 15 16 <div class="col-md-2 title">产品价格</div> 17 <div class="col-md-4 data"> 18 <input type="text" class="form-control" placeholder="产品价格" 19 name="price" value=""> 20 </div> 21 22 <div class="col-md-2 title">产品图片</div> 23 <div class="col-md-4 data"> 24 <input type="file" name="image"> 25 </div> 26 27 <div class="col-md-2 title">所属类别</div> 28 <div class="col-md-4 data"> 29 <select class="form-control select2" style="width: 100%" 30 name="cid" id="category"> 31 32 33 </select> 34 </div> 35 36 <div class="col-md-2 title rowHeight2x">产品描述</div> 37 <div class="col-md-10 data rowHeight2x"> 38 <textarea class="form-control" rows="3" placeholder="其他信息" 39 name="desc"></textarea> 40 </div> 41 42 </div> 43 </div> 44 <!--订单信息/--> <!--工具栏--> 45 <div class="box-tools text-center"> 46 <button type="submit" class="btn bg-maroon">保存</button> 47 <button type="button" class="btn bg-default" 48 onclick="history.back(-1);">返回</button><!--返回上一页--> 49 </div>
和上边的代码写在一页中,这个代码在页面加载时就会主动发送请求,查询所属分类
1 <script src="../WEB-INF/js/jquery.min.js"></script> 2 <script type="text/javascript"> 3 /*点击新建按钮,发送ajax请求,查询下拉列表*/ 4 window.onload=function () 5 $.ajax( 6 url:"/category/select", 7 type:"post", 8 dataType:"json", 9 success:function (data) 10 //alert(data); 11 for (var i = 0; i <data.length ; i++) 12 var option= "<option value=\\""+(i+1)+"\\" selected=\\"selected\\">"+data[i].cname+"</option>"; 13 $("#category").append(option); 14 15 16 ) 17 18 19 20 </script>
3.第三步:编写product类和控制器
Product类
1 public class Product 2 3 private int id; 4 private String name; 5 private double price; 6 private String image; 7 private String desc; 8 private int cid; 9 10 11 public int getId() 12 return id; 13 14 15 public void setId(int id) 16 this.id = id; 17 18 19 20 public String getName() 21 return name; 22 23 24 public void setName(String name) 25 this.name = name; 26 27 28 29 public double getPrice() 30 return price; 31 32 33 public void setPrice(double price) 34 this.price = price; 35 36 37 38 public String getImage() 39 return image; 40 41 42 public void setImage(String image) 43 this.image = image; 44 45 46 47 public String getDesc() 48 return desc; 49 50 51 public void setDesc(String desc) 52 this.desc = desc; 53 54 55 56 public int getCid() 57 return cid; 58 59 60 public void setCid(int cid) 61 this.cid = cid; 62 63 64 @Override 65 public String toString() 66 return "Product" + 67 "id=" + id + 68 ", name=‘" + name + ‘\\‘‘ + 69 ", price=" + price + 70 ", image=‘" + image + ‘\\‘‘ + 71 ", desc=‘" + desc + ‘\\‘‘ + 72 ", cid=" + cid + 73 ‘‘; 74 75
控制器
1 @Controller 2 @RequestMapping("/product") 3 public class ProductController 4 @Autowired 5 private ProductService productService; 6 @RequestMapping("/save") 7 public String save(HttpServletRequest request,MultipartFile image) 8 Map map = request.getParameterMap(); 9 // System.out.println("image = " + image); 10 Product product = new Product(); 11 try 12 BeanUtils.populate(product,map); 13 14 15 //定义文件名 16 String fileName = ""; 17 //1.获取原始文件名 18 String uploadFileName = image.getOriginalFilename(); 19 //2.截取文件扩展名 20 String extendName = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1, uploadFileName.length()); 21 //3.把文件加上随机数,防止文件重复 22 String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase(); 23 //4.判断是否输入了文件名 24 25 if(!StringUtils.isEmpty(image)) 26 fileName = uuid+"_"+image+"."+extendName; 27 else 28 fileName = uuid+"_"+uploadFileName; 29 30 System.out.println(fileName); 31 //2.获取文件路径 32 ServletContext context = request.getSession().getServletContext(); 33 String basePath = context.getRealPath("/img");//设置文件上传之后保存的位置,这里是指target/gongcheng/img 34 //3.解决同一文件夹中文件过多问题 35 // String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); 36 37 //4.判断路径是否存在 38 File file = new File(basePath);//File file = new File(basePath+"/"+datePath());(若使用第3步中的datePath,这步用注释后面的file) 39 if(!file.exists()) 40 file.mkdirs(); 41 42 43 //5.使用 MulitpartFile 接口中方法,把上传的文件写到指定位置 44 image.transferTo(new File(file,fileName)); 45 product.setImage(fileName);//把自定义的文件名存入数据库中 46 47 productService.save(product); 48 49 catch (Exception e) 50 e.printStackTrace(); 51 52 53 54 55 return "product-list"; 56 57 58 59 @RequestMapping("/findAll") 60 @ResponseBody 61 public List<Product> findAll() 62 63 List<Product> products = productService.findAll(); 6465 66 return products; 67 68 69 70
4. 第四步:在spring-mvc.xml中配置文件解析器
1 <!-- 配置文件上传解析器 --> 2 <bean id="multipartResolver" <!-- id 的值是固定的--> 3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 4 <!-- 设置上传文件的最大尺寸为 5MB --> 5 <property name="maxUploadSize"> 6 <value>5242880</value> 7 </property> 8 </bean> 9 注意: 10 文件上传的解析器 id 是固定的,不能起别的名称,否则无法实现请求参数的绑定。(不光是文件,其他 11 字段也将无法绑定)
二、数据库图片在页面显示
1 <script src="../WEB-INF/js/jquery.min.js"></script> 2 <script type="text/javascript">
页面加载自动刷新(或者用window.onload=function()$.ajax( url:...)) 3 $(function () 4 5 $.ajax( 6 7 url:"/product/findAll", 8 method:"post", 9 dataType:"json", 10 success:function (data) 11 12 console.log(data); 13 14 for (var i = 0; i < data.length; i++) 15 16 var tr = "<tr>\\n" + 17 "\\t<td><input name=\\"ids\\" type=\\"checkbox\\"></td>\\n" + 18 "\\t<td>"+(i+1)+"</td>\\n" + 19 "\\n" + 20 "\\t<td>"+data[i].name+"</td>\\n" + 21 "\\t<td>\\n" + 下面这个就是 22 "\\t\\t<img width=\\"40px\\" src=\\"$pageContext.request.contextPath/img/"+data[i].image+"\\" alt=\\"\\">\\n" + 23 "\\t</td>\\n" + 24 "\\t<td>"+data[i].price+"</td>\\n" + 25 "\\t<td>"+data[i].cid+"</td>\\n" + 26 "</tr>\\n" 27 $("#list").append(tr); 28 29 30 ) 31 ) 32 </script>
以上是关于我爱Java系列---SpringMVC传统方式的文件上传和前端获取数据库图片在页面显示的主要内容,如果未能解决你的问题,请参考以下文章