【SSH网上商城项目实战13】Struts2实现文件上传功能
转自:https://blog.csdn.net/eson_15/article/details/51366384
上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说。为此,这篇文章详细介绍一下Struts2实现文件上传的功能。
1. 封装文件信息
我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件、文件类型和文件名。针对我们要传的图片,我们新建一个Model如下:
1 public class FileImage { 2 private File file; 3 private String contentType; 4 private String filename; 5 6 public File getFile() { 7 return file; 8 } 9 10 public String getContentType() { 11 return contentType; 12 } 13 14 public String getFilename() { 15 return filename; 16 } 17 18 public void setUpload(File file) { //set方法可以不用和属性名一样,但是前台传进来时的参数得和set方法名相同。即前台传的参数为fileImage.upload 19 this.file = file; 20 } 21 22 public void setUploadContentType(String contentType) { 23 this.contentType = contentType; 24 } 25 26 public void setUploadFileName(String filename) { 27 this.filename = filename; 28 } 29 }
这样Model就写好了,考虑到文件上传的逻辑不是单个Action所特有的,所以我们将文件上传的逻辑写到工具类中,这样可供所有的Action调用。所以我们新建一个文件上传工具类(为了面向接口编程,我们也将工具类抽出个接口):
2. 完成文件上传工具类
1 //文件上传工具类接口 2 public interface FileUpload { 3 4 //实现文件上传的功能,返回上传后新的文件名称 5 public abstract String uploadFile(FileImage fileImage); 6 7 } 8 9 //文件上传工具类具体实现 10 @Component("fileUpload") 11 public class FileUploadUtil implements FileUpload { 12 13 private String filePath; 14 @Value("#{prop.filePath}") 15 //@Value表示去beans.xml文件中找id="prop"的bean,它是通过注解的方式读取properties配置文件的,然后去相应的配置文件中读取key=filePath的值 16 public void setFilePath(String filePath) { 17 System.out.println(filePath); 18 this.filePath = filePath; 19 } 20 21 //1. 通过文件名获取扩展名 22 private String getFileExt(String fileName) { 23 return FilenameUtils.getExtension(fileName); 24 } 25 26 //2. 生成UUID随机数,作为新的文件名 27 private String newFileName(String fileName) { 28 String ext = getFileExt(fileName); 29 return UUID.randomUUID().toString() + "." + ext; 30 } 31 32 //实现文件上传的功能,返回上传后新的文件名称 33 @Override 34 public String uploadFile(FileImage fileImage) { 35 //获取新唯一文件名 36 String pic = newFileName(fileImage.getFilename()); 37 try { 38 FileUtil.copyFile(fileImage.getFile(), new File(filePath, pic));//第一个参数是上传的文件,第二个参数是将文件拷贝到新路径下 39 return pic; 40 } catch (Exception e) { 41 throw new RuntimeException(e); 42 } finally { 43 fileImage.getFile().delete(); 44 } 45 } 46 }
上面有个@Value注解,是从properties文件中获取文件要存入的路径的,具体可参见:Spring获取配置文件信息 。
3. 在Action中注入封装文件类和工具类
写好了文件封装类和上传文件工具类后,我们需要将这两个对象注入到我们的Action中,这样就可以在Action中实现文件上传的功能了:
1 @Controller("baseAction") 2 @Scope("prototype") 3 public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> { 4 5 //封装了图片信息的类 6 protected FileImage fileImage; 7 8 //上传文件工具类 9 @Resource 10 protected FileUpload fileUpload; 11 12 public FileImage getFileImage() { 13 return fileImage; 14 } 15 public void setFileImage(FileImage fileImage) { 16 this.fileImage = fileImage; 17 } 18 //省略其他无关代码…… 19 }
4. 实现文件的上传
好了,现在我们可以在ProductAction中去实现文件上传了,工具类写好的话,在Action中的代码量就很少了,这也是封装带来的优点。
1 @Controller("productAction") 2 @Scope("prototype") 3 public class ProductAction extends BaseAction<Product> { 4 5 //省略其他无关代码…… 6 7 public void save() throws Exception { 8 //fileUpload工具类被抽取了,uploadFile方法直接接受一个fileImage对象,返回新的图片名 9 String pic = fileUpload.uploadFile(fileImage); 10 11 model.setPic(pic); 12 model.setDate(new Date()); 13 System.out.println(model); 14 //商品信息入库 15 productService.save(model); 16 } 17 18 public void update() { 19 String pic = fileUpload.uploadFile(fileImage); 20 model.setPic(pic); 21 model.setDate(new Date()); 22 System.out.println(model); 23 //更新商品 24 productService.update(model); 25 } 26 }
这样我们就完成了从前台上传文件的功能。
转载于:https://www.cnblogs.com/sharpest/p/9850157.html
【SSH网上商城项目实战13】Struts2实现文件上传功能相关推荐
- 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断
转自:https://blog.csdn.net/eson_15/article/details/51425010 上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登 ...
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
在第8节我们完成了查询和删除商品类别的功能,那么现在实现查询和删除商品的功能就很好做了,原理和第8节一模一样,只是修改一些参数,比如请求不同的action等.由于查询和删除商品不需要弹出新的UI窗口, ...
- 【SSH网上商城项目实战】之环境搭建填坑
此篇主要是记录我在从零开始走一遍倪升武大神的[SSH网上商城项目实战]过程中遇到的一些坑并记录解决方法.关于这个项目,大家可以去倪升武的博客学习了解,SSH网上商城项目实战请戳倪升武的项目实战专题. ...
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...
- 【SSH网上商城项目实战21】从Demo中看易宝支付的流程
这一节我们先写一个简单点的Demo来测试易宝支付的流程,熟悉这个流程后,再做实际的开发,因为是一个Demo,所以我没有考虑一些设计模式的东西,就是直接实现支付功能.实现支付功能需要易宝给我们提供的AP ...
- 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...
- 【SSH网上商城项目实战20】在线支付平台的介绍
之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容, ...
- 【SSH网上商城项目实战07】Struts2和Json的整合
上一节我们完成了DataGrid显示jason数据,但是没有和后台联系在一起,只是单纯地显示了我们自己弄的json数据,这一节我们将json和Struts2整合,打通EasyUI和Struts2之间的 ...
- 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...
- 【SSH网上商城项目实战23】完成在线支付功能
转自:https://blog.csdn.net/eson_15/article/details/51464415 上一节我们做好了支付页面的显示,从上一节支付页面显示的jsp代码中可以看出,当用户点 ...
最新文章
- SVN冲突出现原因及解决方法浅谈
- Android 动画分析学习笔记
- python简单工厂模式_简单工厂模式-python语言实现
- mysql redis hbase_MySQL之基本介绍
- 数据库缓冲池_块缓冲| 数据库管理系统
- ArcGIS客户端开发学习笔记(二)——XML
- JAVA常见算法题(二十五)
- opnet安装的问题
- 开源免费CRM云端的客户管理系统SuiteCRM简介
- 三维向量的一些运算技巧,如何计算坐标
- 四月,诗月,你是最美人间四月天。
- IBM服务器RAID5
- Qt ui 到底是什么?
- Maven 上手指南
- 华为系统云服务器地址,华为系统云服务器地址
- s3c2440 uboot 移植 (四)支持环境变量在nandflash 存储
- TinyOS总体介绍
- JetBrains公司旗下开发工具简介
- linux常用端口查询
- 哈希函数——SHA1
热门文章
- __proto__和prototype 小记
- axios.js post 后台木有数据
- JS中的数组排序函数sort()
- javascript笔记——js面试问题
- 细谈会话管理-----Cookie和Session
- 写, 读sdcard目录上的文件
- uploadify 3.1 /3.2 在Firefox,Chrome 浏览器下,进入页面请求两次问题解决办法。
- TreeMap按照key排序
- AMQ学习笔记 - 16. 确认机制的测试
- bzoj 1009: [HNOI2008]GT考试