项目目录:
struts.xml配置:
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="upload" namespace="/upload" extends="struts-default"> <action name="upload" class="com.oracle.upload.UploadAction"> <result> /uploadsucc.jsp </result> </action> </package>
上传图片jsp代码:刚开始一直报错,原来没写enctype,原来是没写form的enctype属性。enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。有三个参数:
1,application/x-www-form-urlencoded。在发送前编码所有字符(默认)
2,multipart/form-data。不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
3,text/plain。空格转换为 "+" 加号,但不对特殊字符编码。
<body>
<form action="<%=basePath%>upload/upload.action" method="post" enctype="multipart/form-data">
文件::<input type="file" name="image">
<input type="submit" value="上传"/>
</form>
</body>
效果:
UploadAction代码:
package com.oracle.upload; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport{ private File image; //接收jsp传的参数 /** * imageFileName是Struts2内置的属性。值是上传的文件名,如1.jpg。 * 用<s:property value=""/>标签可以显示其值。<s:debug>标签在值栈里也可以看到。 */ private String imageFileName; public String execute() throws IOException{ /** * Path---E: omcat7.0webappsStruts2_FileUpload2images, * ServletActionContext.getServletContext()得到项目的根目录。 * 再.getRealPath("/images")就是项目根目录下的images文件夹。 */ String path = ServletActionContext.getServletContext().getRealPath("/images"); //String path = "E:/project/images";还可以自己new一个存放文件的路径。 //System.out.println("Path---"+path); if(image != null){ /** * new一个我们存放文件的:目录+文件名 * 父路径:new File(path)就是E: omcat7.0webappsStruts2_FileUpload2images * 子文件:就是上传的文件名:如1.jpg * 所以全路径为:E: omcat7.0webappsStruts2_FileUpload2images1.jpg */ File savefile = new File(new File(path),imageFileName); //System.out.println("保存图片的绝对路径+图图片名:"+savefile.getAbsolutePath()); if(! savefile.getParentFile().exists()){ //如果父路径不存在,创建他的所有路径。 savefile.getParentFile().mkdirs(); //*将image拷贝到我们的文件夹 FileUtils.copyFile(image, savefile); }else{ //如果父路径存在,直接拷贝。 FileUtils.copyFile(image, savefile); } ActionContext.getContext().getSession().put("message", "上传成功"); }else{ ActionContext.getContext().getSession().put("message", "上传失败"); } return SUCCESS; } public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } }
上传成功uploadsucc.jsp:注意加上<%@ taglib uri="/struts-tags" prefix="s" %>标签。
<body> ${message}<br> <img src="<%=basePath%>images/${imageFileName}" style=" 300px;height: 200px"> <br/> <s:property value="getImageFileName()"/> <s:debug></s:debug> <hr/> <form action="upload/upload.action" method="post" enctype="multipart/form-data"> 选择文件<input type="file" name="image"> <input type="submit" value="上传"/> </form> </body>
上传成功效果: