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

    步骤三:展示所有的商品

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

  • 相关阅读:
    elasticsearch 7.8.X 数据类型与使用规范
    Elasticsearch 7.8.x 设置账号密码的问题。基础级安全
    swoft2.x 扩展elasticsearch 组件
    一张图理清js原型链(通过内置对象的引用关系)
    在webkit中如何避免触发layout(重排)
    no-cache、max-age=0、must-revalidate区别
    HTTP缓存机制[译文]
    v8 源码获取与build
    CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (四)问题汇总
    CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置
  • 原文地址:https://www.cnblogs.com/deijiawoyu/p/12502840.html
Copyright © 2020-2023  润新知