在网上商城项目中,需要在后台添加商品,并上传图片,是利用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";
}
写好后在Struts.xml中配置如下:
<action>
<result name="saveSuccess" type="redirectAction">adminProduct_findAll.action?page=1</result>
</action>
整个文件的上传就完美实现了!