在网上商城项目中,需要在后台添加商品,并上传图片,是利用Struts2框架来完成的文件上传,先看一下页面的表
单显示:
jsp代码如下,其中type为文件类型,文件名为upload
<tr> <td width="18%" align="center" bgColor="#f5fafe" class="ta_01"> 商品图片: </td> <td class="ta_01" bgColor="#ffffff" colspan="3"> <input type="file" name="upload" /> </td> </tr>
Struts2框架实现文件上传时,文件需满足三个条件:
1.表单提交的方式需要是POST
2.表单中上传项必须有一个
3.表单中的enctype属性值需要是multipart/form-data
故在提交时,代码如下:
<form id="userAction_save_do" name="Form1" action="${pageContext.request.contextPath}/adminProduct_save.action" method="post" enctype="multipart/form-data">
接下来就是常规的 *.jsp----->Action----->Service----->Dao 一系列基本操作了。应该注意的是在action中需要接受
文件相关的三个参数
//文件上传需要的参数 private File upload; //上传的文件,这里跟jsp<imput type="file" name="upload">表单中的name一致 private String uploadFileName;//接收文件上传的文件名 private String uploadContentType;//接收文件上传的文件的MIME的类型 public void setUpload(File upload) { this.upload = upload; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; }
最后实现文件的上传:
首先获得磁盘绝对路径,在javaweb中有介绍文件名重名,目录的分离等问题。暂时还没研究,后期学习。现在获
得路径是WebRoot下的products的路径,为磁盘绝对路径。获得路径后需创建文件(路径+文件名),再实现文件的
上传,使用工具类FileUtils.copyFile(upload,diskFile),源文件是upload,copy到服务器的路径realPath就可以了。在
加上图片的路径即可。最后将数据保存到数据库中完成文件上传整个操作。核心代码如下:
// 保存商品的方法: public String save() throws IOException { // 将提交的数据添加到数据库中. product.setPdate(new Date()); // product.setImage(image); if(upload != null){ // 将商品图片上传到服务器上. // 获得上传图片的服务器端路径. String path = ServletActionContext.getServletContext().getRealPath( "/products"); // 创建文件类型对象: File diskFile = new File(path + "//" + uploadFileName); // 文件上传: FileUtils.copyFile(upload, diskFile); product.setImage("products/" + uploadFileName); } productService.save(product);//调用Service完成保存的操作,并将数据保存到数据库 return "saveSuccess"; }
<action> <result name="saveSuccess" type="redirectAction">adminProduct_findAll.action?page=1</result> </action>