• ssh整合问题总结--在添加商品模块实现图片(文件)的上传


      今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中:

      完成这个功能需要两个步,第一是图片上传,第二是保存到数据库,在完成这个功能时候碰到了一些小问题,所以把完整的步骤记录一下:

      第一步,在form标签下,添加一个属性,enctype="multipart/form-data",  我刚开始脑袋短路将这个属性写到了type为file的那么input标签下,结果死活提交不了表单数据,差点自杀,还有要注意的一点就是<input type="file" name="upload"/>中的name的命名要与action中File的对象名保持一致.(注意紫色代码部分)

    <form action="${pageContext.request.contextPath }/adminGoods_addGoods.action" method="post" enctype="multipart/form-data">
    
        <input type="file" name="upload"/>
    
    </form>

    处理Action中(AdminGoodsAction.java):

    package com.wang.shop.adminGoods.action;
    
    import java.io.File;
    import java.io.IOException;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import com.wang.shop.admin.entity.Admin;
    import com.wang.shop.goods.entity.Goods;
    import com.wang.shop.goods.service.GoodsService;
    import com.wang.shop.util.PageBean;
    
    public class AdminGoodsAction extends ActionSupport implements
            ModelDriven<Goods> {
    
        private GoodsService goodsService;
        private Goods goods = new Goods();
        
        private int page;
        // 文件上传需要的参数
        private File upload;// 上传的文件
        private String uploadFileName;//上传的文件名陈
        private String uploadContentType;// 接收文件上传的MIME类型
        /**
         * 添加商品
         * @return
         */
        public String addGoods() {
            System.out.println(uploadFileName);
            goods.setGoodsPicture(uploadFileName);
            if (upload != null) {
                // 获得文件上传的磁盘绝对路径
                try {
                    String realPath = ServletActionContext.getServletContext()
                            .getRealPath("/images");
                    // 创建一个文件
                    File diskFile = new File(realPath + File.separator
                            + uploadFileName);
                    // 文件上传,使用FileUtils工具类
                    FileUtils.copyFile(upload, diskFile);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println(goods);
            goodsService.saveGoods(goods);
            return "addGoods_succ";
        }
    
        public void setGoodsService(GoodsService goodsService) {
            this.goodsService = goodsService;
        }
    
        @Override
        public Goods getModel() {
            // TODO Auto-generated method stub
            return goods;
        }
    
        public void setUpload(File upload) {
            this.upload = upload;
        }
    
        public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
    
        public void setPage(int page) {
            this.page = page;
        }
    }

      注意,我项目中存放图片的路径是WebRoot下的images文件夹,执行完操作后,如果发现该文件夹中没有出现你所上传的图片,先不要怀疑代码是否错了,应该先去tomcat安装目录下找到该项目的images文件夹,图片会上传到那里,在eclipse的images文件夹下可能会找不到,不过不用担心,只要tomcat中上传成功了,就可以用了.

      需要注意的地方有以下几点:

      1:action中需要定义三个属性,上传的文件File,上传的文件名,和上传文件的MIME类型.

      2.File类型的对象名需要和jsp中type="file"的input的name属性值相同.

      3.String类型文件名=File对象名+FileName.

      4.可以通过String realPath = ServletActionContext.getServletContext().getRealPath("/images");获得当前项目的绝对路径

      5.FileUtils的copyFile方法,可以简便的实现文件从一个目录上传到另一个目录,其中第一个参数是源文件File类型对象,第二个参数是目标文件File类型对象.这里其实就模拟了从本地上传到服务器的过程,注意参数类型都是File类型.

  • 相关阅读:
    powerbulider9.0在数据窗口中实现滚动到新添加行
    C#获取当前路径,获取当前路径的上一层路径
    java开发工具使用
    plsql高级查询命令
    oracle基础命令
    oracle-11g-64位安装和plaql
    初识设计模式(装饰者模式)
    初识设计模式(观察者模式)
    观察者模式与发布订阅者模式的区别
    初识设计模式(策略模式)
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5336910.html
Copyright © 2020-2023  润新知