项目模块--3.商品添加模块+数据库存储图片问题
简介
商品添加功能为后台管理功能之一,而在添加商品时上传商品图片文件又为其中的难点,本文使用SpringMVC提供的MultipartResolver解析文件上传请求,使用MultipartFile来
进行接收文件。
步骤一:提供文件上传的前端页面
该页面提供一个SpringMVC中的form来提交数据,该数据为一个goods(实体类)对象,使用input:path来绑定对象中的属性值。
1 <form:form action="adminGoods/addGoods" method="post" modelAttribute="goods" enctype="multipart/form-data"> 2 <table border=1 style="border-collapse: collapse"> 3 <caption> 4 <font size=4 face=华文新魏>添加商品</font> 5 </caption> 6 <tr> 7 <td>名称<font color="red">*</font></td> 8 <td> 9 <form:input path="gname"/> 10 </td> 11 </tr> 12 <tr> 13 <td>原价<font color="red">*</font></td> 14 <td> 15 <form:input path="goprice"/> 16 </td> 17 </tr> 18 <tr> 19 <td>折扣价</td> 20 <td> 21 <form:input path="grprice"/> 22 </td> 23 </tr> 24 <tr> 25 <td>库存</td> 26 <td> 27 <form:input path="gstore"/> 28 </td> 29 </tr> 30 <tr> 31 <td>图片</td> 32 <td> 33 <input type="file" name="logoImage"/> 34 </td> 35 </tr> 36 <tr> 37 <td>类型</td> 38 <td> 39 <form:select path="gtypeId"> 40 <form:options items="${goodsType}" itemLabel="gtName" itemValue="id"/> 41 </form:select> 42 </td> 43 </tr> 44 <tr> 45 <td align="center"> 46 <input type="submit" value="提交"/> 47 </td> 48 <td align="left"> 49 <input type="reset" value="重置"/> 50 </td> 51 </tr> 52 </table> 53 </form:form>
注意:1.使用指令来引入springMVC标签。2.在使用包含文件上传控件的表单时,必须设置 enctype=“multiparty/form-date”。
将用户填入的goods对象提交给adminGoods/addGoods。
步骤二:配置spring的MultipartResolver来实现文件上传
1.在maven中导入依赖
1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.3</version> 5 </dependency>
2.在spring的配置文件中添加MultipartResolver的配置,解析器的id必须为multipartResolver,否则上传文件超过3m时会报错。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSizePerFile" value="10240000"/>
</bean>
3.使用MultipartFile类的一些方法完成对文件的操作。
得到上传的文件的名称,其中goods中包含属性 MultipartFile LogoImage;并有该属性的set,get方法。
String fileName = goods.getLogoImage().getOriginalFilename();
得到上传文件的扩展名
String fileType = fileName.substring(fileName.lastIndexOf("."));
给文件创建一个新名
String newFileName = Myunit.getStringID()+fileType;
得到存放文件的目录,在项目的根路径下的logos文件夹
String realpath = request.getServletContext().getRealPath("logos");
创建File类型的对象用来存放,上传的文件。
File targetFile= new File(realpath,newFileName);
将上传文件转存到targetFile对象中
goods.getLogoImage().transferTo(targetFile);
1 String newFileName = ""; 2 //1.获取上传的文件的原始名称,根据浏览器的不同可能包含文件在客户端文件系统中的路径 3 String fileName = goods.getLogoImage().getOriginalFilename(); 4 //2.判断是否得到了文件名 5 if (fileName.length() > 0) { 6 //3.得到了文件后,获取项目根路径下logos子文件夹的路径 7 String realpath = request.getServletContext().getRealPath("logos"); //是否需要自己创建logos 8 //4.得到文件名后缀 9 String fileType = fileName.substring(fileName.lastIndexOf('.')); 10 //5.文件名的处理:生成新的文件名newFileName,然后使用set放置到对象中 11 newFileName = MyUtil.getStringID()+fileType; 12 goods.setGpicture(newFileName); 13 //6.根据路径和文件名创建文件对象 14 File targetFile= new File(realpath,newFileName); 15 if (!targetFile.exists()) { 16 targetFile.mkdirs();//7.将文件存放在服务器的文件系统中 17 } 18 try{ 19 goods.getLogoImage().transferTo(targetFile); //8.将Multipartfile转为普通的file文件 20 }catch (Exception e){ 21 e.printStackTrace(); 22 } 23 }
注意:重新启动tomcat后,会将logos文件,删除。
步骤三:展示所有的商品
晚上再补,分页+数据库取出图片
posted on 2020-03-17 12:13 hello,bdiskl 阅读(299) 评论(0) 编辑 收藏 举报