项目模块--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文件,删除。

步骤三:展示所有的商品

晚上再补,分页+数据库取出图片

原文地址:https://www.cnblogs.com/deijiawoyu/p/12502840.html