(一)预备工作:
首先, 建立struts2的工作環境,这里就不说了。
然后把 commons-fileupload.jar和 commons-io.jar拷贝到 classpath路径下。
(二)建立一个上传文件的页面 , upload.jsp。
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>使用List上传多个文件</title>
</head>
<body>
<s:fielderror/>
<form action="upload.action" method="post" enctype="multipart/form-data">
<table>
<tbody>
文件标题:<input type="text" name="title" /><br>
选择第一个文件:<input type="file" name="upload" /><br>
选择第二个文件:<input type="file" name="upload" /><br>
选择第三个文件:<input type="file" name="upload" /><br>
<input value="上传" type="submit" />
</tbody>
</table>
</form>
</body> </html>
(三)上传类:
基本原理:
上传文件是由FileUploadInterceptor实现的,基本原理是这样的,FileUploadInterceptor会从上传的数据中解析出上传的文件名称,文件类型和文件内容,调用Action相应的方法进行设置。
struts2上传实现的关键:假定上传表单中File控件的名称是upload,则Action必须实现如下三个属性来封装文件域:
List upload; //封裝tpye=file的文件域的文件内容
String uploadContentType; //封装文件类型
String uploadFileName; //封装文件的名字
如果是多個文件上傳,則:
private List<File> upload; //用List封裝多个tpye=file的文件域的文件内容
private List<String> uploadContentType; //List封装多个文件类型
private List<String> uploadFileName; //List封装多个文件的名字
java代码如下:
package lee;
import com.opensymphony.xwork2.Action;
import org.apache.struts2.ServletActionContext;
import java.util.*;
import java.io.*;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport
{
/**
*
*/
private static final long serialVersionUID = -9196711870948215911L;
private String title;
private List<File> upload; //用List封裝多个tpye=file的文件域的文件内容
private List<String> uploadContentType; //List封装多个文件类型
private List<String> uploadFileName; //List封装多个文件的名字
//接受依赖注入的属性
private String savePath;
//接受依赖注入的方法
public void setSavePath(String value){
this.savePath = value;
}
@SuppressWarnings("deprecation")
private String getSavePath() throws Exception {
return ServletActionContext.getRequest().getRealPath(savePath);
}
@Override
public String execute() throws Exception
{
System.out.println("文件lujing::"+ getUpload());
List<File> files = getUpload();
for (int i = 0 ; i < files.size() ; i++)
{
//以服务器的文件保存地址和原文件名建立上传文件输出流
FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName().get(i));
FileInputStream fis = new FileInputStream(files.get(i));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer , 0 , len);
}
}
return SUCCESS;
}
public void setTitle(String title) {
this.title = title;
}
public void setUpload(List<File> upload) {
this.upload = upload;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getTitle() {
return (this.title);
}
public List<File> getUpload() {
return (this.upload);
}
public List<String> getUploadContentType() {
return (this.uploadContentType);
}
public List<String> getUploadFileName() {
return (this.uploadFileName);
}
}
(四)struts.xml
这个文件放在src的根目录中,编译后的位置就是在WEB-INF/classes里面,代码如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 上传文件的最大值 -->
<constant name="struts.multipart.maxSize" value="100000000"></constant>
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<!-- <constant name="struts.i18n.encoding" value="UTF-8"></constant> -->
<package name="tel" extends="struts-default">
<!-- 上傳測試 -->
<action name="upload" class="lee.UploadAction">
<!-- struts2上傳文件的攔截器 -->
<interceptor-ref name="fileUpload">
<!-- 定义允许的上传文件的类型-->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/pjpeg</param>
<!-- 上传文件的最大值,超過2M,這裡就失去了作用 -->
<param name="maximumSize">2000000</param>
</interceptor-ref>
<!-- 默認拦截器 -->
<interceptor-ref name="defaultStack"/>
<!-- 動態參數:文件在服務器的保存路徑,相对路径 -->
<param name="savePath">/upload</param>
<!-- 上傳出錯,頁面調轉到input -->
<result name="input">/upload.jsp</result>
<!-- 上傳成功,頁面調轉到 -->
<result name="success">/succ.jsp</result>
</action>
</package>
</struts>
(五)全局资源文件
#上傳格式不對的錯誤提示
struts.messages.error.content.type.not.allowed=上傳文件格式不對,請重新選擇!
#上傳超過最大限制的錯誤提示
struts.messages.error.file.too.large=上傳文件最大為20M,請重新選擇!
#上傳出現其他錯誤的提示
struts.messages.error.uploading=傳輸出錯,請重試!
分享到:
相关推荐
解决Struts2上传时候使用UTF-8的冲突问题: * 重新包装了JakartaMultiPartRequest提供Chartset的设置方法。 * 可以通过配置方式对MultiPartRequest中的内容进行编码设定,请在Struts.xml中配置添加struts.multipart...
struts2上传文件进度条显示,里面有详细的代码
Uploadify结合Struts2上传demo
struts2上传下载项目,代码详细,注释清晰,简单易懂
struts2上传图片到Oracle,并进行显示,测试可以成功上传
struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload
Struts2上传图片并生成等比例缩略图的实例,在上传文件的同时生成等比例的缩略图,分放在不同的文件夹下。自己亲测,没有问题。
struts2上传和下载文件详细源码,适合初学者,转载
struts2上传单个文件及多个文件,strus2拦截器的使用,里面有个user用户,先执行user.jsp即登陆,可以执行上传文件的操作,反之,不能,有个exit.jsp,退出之后不能执行。里面含有jar文件,导入myeclipse可以执行...
Jquery+struts2上传图片,制作进度条等示例,还有Jquery+Json+Struts实现Ajax技术,还有图形处理技术等,虽然很少,但都有重点突出,由于我也是学习,所以代码不是很简洁,对想学习交流的朋友非常合适
这个bug是由Struts2上传文件后return SUCCESS后报的错误: java.lang.AbstractMethodError: be.telio.mediastore.ui.upload.GarryMultiPartRequest.cleanUp()V at org.apache.struts2.dispatcher.multipart....
有关struts2上传 有关struts2上传有关struts2上传
struts上传视频与照片可以再后页面显示。支持同时上传。
Struts2上传文件(直接用request)
struts2上传下载实例包含了很多种不同的方法
struts2 struts2上传 struts2上传文件 struts2上传实例 struts上传,随手写的一个Demo,测试可以通过.
ckeditor和struts2实现图片上传和编辑器上浏览!
使用struts2框架的一个文件上传demo。。大家互相学习学习,里面有注释了,觉得好的顶一下吧。
使用struts2 上传图片到项目webapps目录下 然后生成缩略图 返回到页面显示缩略图
struts2上传下载struts2上传下载