首先要导入stuts2的所有jar包以及文件上传的jar包
在jsp页面中主要代码:
<body>
<form action="fileUp" method="post" enctype="multipart/form-data">
本地浏览:<input type="file" name="file" /><br/>
<input type="submit" value="提交"/>
</form>
</body>
上传到相应的Action中的代码
public class FileAction extends ActionSupport{
private String des;//待上传的文件将要保存到哪里去
private String filePath;//待上传的文件将要保存到des文件夹下的那个文件中去(使用依赖注入的一个字符串)
private File file;//待上传的文件对象
//下面需要注意的是这个属性命名格式 必须是文件对象的文件名+ContentType,文件对象文件名+FileName。只有这样才能在上传图片的同时将图片的文件名加后缀,文件类型赋值上去
private String fileContentType; // 上传文件类型
private String fileFileName; // 上传文件的真实名字
//省阅get/set方法
public String fileUp()
{
des=ServletActionContext.getServletContext().getRealPath(this.filePath)+"\\"+this.fileFileName;//将要保存到服务器的文件路径
try {
moveTo(des, this.file.getPath());
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
public void moveTo(String des,String from) throws IOException
{
/**
* BufferedInputStream对象为FileInputStream(from)对象添加一些功能,(其实BufferedInputStream对象装饰了InputStream对象)
* BufferedInputStream对象的创建会创建一个内部缓冲区数组,会将FileInputStream(from)从磁盘读取的指定数据填充到该缓冲区
* BufferedOutputStream同理
*/
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(des));
byte[] b=new byte[1024*4];//每次从FileInputStream读取文件的字节数
int length=0;
while((length=bis.read(b))!=-1)
{
//将读取到的数据写入到指定的文件路径中
bos.write(b);
}
/**
* 读完后,需要关闭输入,输出流
*
*/
if(null!=bis)
{
bis.close();//本方法的调用是关闭FileInputStream(from)的输入流
}
if(null!=bos)
{
bos.close();//本方法的调用是关闭FileOutStream(des)的输入流
}
}
在看下struts.xml里面有关上传的那个Action的配置
<action name="fileUp" class="com.action.FileAction" method="fileUp">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg //允许上传的图片格式,不在列表之内的都不能上传
</param>
</interceptor-ref>
<param name="filePath">\\uploadPic</param> //采用依赖注入,将节点的值就是服务器里面要保存图片的那个文件夹(需要注意这个文件夹必须在服务器的要存在)
<result name="success">showUpload.jsp</result>
</action>
在web.xml里面的配置
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实现的关键代码就这些。希望能够帮到大家。谢谢!