先是最简单的上传
后面是配置上传文件的大小和文件类型
a.编写Action组件,定义File []xxx,String[] xxxFileName,String[] xxxContentType,添加set方法
xxx为临时文件
xxxFileName可以得到上传文件名 //后面的FileName为固定写法
xxxContentType可以得到文件上传类型 //后面的ContentType为固定写法
在相应action方法中其实就是复制文件因为临时文件会自动被删除
b.在form表单中
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="xxx"><br/>//名字必须为XXX
<input type="file" name="xxx"><br/>
<input type="submit" value="上传">
</form>
例子:
action:
public class FileUpload extends ActionSupport
{
private File[] fm;
private String[] fmFileName;
private String[] fmContentType;
@Override
public String execute() throws Exception {
String real=ServletActionContext.getServletContext().getRealPath("/WEB-INF/video");
for(int i=0;i<fm.length;i++)
{
fmFileName[i]=UUID.randomUUID()+"_"+fmFileName[i];//防止文件重名问题
String path=getPath(real,fmFileName[i]);//防止一个目录存放多个文件
FileUtil.copy(fm[0], new File(path+File.separator+fmFileName[i]));
}
return super.execute();
}
private String getPath(String real, String file) {
// TODO Auto-generated method stub
int hashcode=file.hashCode();
int dir1=hashcode & 0xf;
int dir2=(hashcode & 0xf0)>>4;
String path=real+File.separator+dir1+File.separator+dir2;
File f=new File(path);
if(!f.exists()){
f.mkdirs();
}
return path;
}
Util:
public class FileUtil {
public static void copy(File src, File desc) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
FileInputStream fis = new FileInputStream(src);
bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(desc);
bos = new BufferedOutputStream(fos);
int size = -1;
byte[] buf = new byte[1024];
while ((size = bis.read(buf)) > 0) {
bos.write(buf, 0, size);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
}
xml:
<package name="jack" namespace="/" extends="struts-default">
<action name="upload" class="action.FileUpload">
<result>/WEB-INF/JSP/ok.jsp</result>
</action>
<action name="form">
<result>/WEB-INF/JSP/form.jsp</result>
</action>
</package>
form.jsp:
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="fm"><br/>
<input type="file" name="fm"><br/>
<input type="submit" value="上传">
</form>
</body>
----在src下新建个struts.properties----
写上:struts.multipart.maxSize=2097152000 //改变文件上传大小
----action中限制上传类型和上传文件大小-----
c.在struts.xml的action配置中,定义fileUpload拦截器的引用,并指定限定参数
d.将Action组件继承ActionSupport,并在action配置中添加input视图
e.在input视图中使用<s:fielderror/>标签显示提示信息<result name="input">error.jsp</result>
默认为2m
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/jpeg,image/gif</param>
<param name="maximumSize">2097152</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<result>/WEB-INF/JSP/ok.jsp</result>
<result name="input">/WEB-INF/JSP/error.jsp</result>
也可以修改常量改上传文件大小
下载:
action:
//struts.xml文件中<param name="inputName">downFile</param>必须要有
private InputStream downFile;
//接收请求参数根据传过来的id下载相应资源不是必须的
private int id;
//给配置文件传值用于显示不是必须的
private String fname;
//将要下载的资源给downFile属性
public String execute(){
//TODO 可以追加登录\扣积分\是否为会员等检查
//TODO 根据id去数据库获取文件名
fname = "a.bmp";
String destPath = ServletActionContext.getServletContext().getRealPath("/images");
String fileName = destPath+File.separatorChar+fname;
try {
downFile = new FileInputStream(fileName);
return "success";
} catch (FileNotFoundException e) {
e.printStackTrace();
return "fail";
}
}
<!-- 下载 -->
<action name="down" class="tarena.action.DownLoadAction">
<result name="success" type="stream">
<param name="inputName">downFile</param>//Action中InputStream的名字
<param name="contentDisposition">attachment;filename=${fname}</param>
//attachment没有预览效果点击直接打开下载对话框默认为inline;filename显示给用户看到的文件名字
<param name="bufferSize">1024</param>
</result>
<result name="fail">/fail.jsp</result>
</action>
相关推荐
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
在这个主题“Struts2文件上传与下载”中,我们将深入探讨如何在Struts2框架中实现文件的上传和下载功能,这对于创建交互式的Web应用是至关重要的。 文件上传允许用户通过Web表单提交文件到服务器,而文件下载则是将...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
### Struts2文件上传与下载教程 #### 一、文件上传原理及实现 **1.1 基础概念** 文件上传是Web开发中的常见需求之一。在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...
struts2文件的上传与下载,包含超出指定文件大小之后的提示。更多详细内容,请参考博客:http://blog.csdn.net/qq_20889581/article/details/52838848
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
在Struts2中,文件上传功能是常见的需求,比如用户可能需要上传个人照片、文档或者其他类型的文件。在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload
### Struts2 文件上传与下载实现详解 #### 一、简介 在Web开发中,文件的上传和下载是非常常见的需求之一。Struts2框架作为Java Web开发中的一个重要框架,提供了非常方便的方式来处理这类操作。本文将详细介绍如何...
在这个特定的场景中,我们关注的是如何使用Struts来实现文件的上传和下载功能。这个功能对于任何Web应用来说都是非常重要的,因为它允许用户交互地处理数据和资源。 首先,我们需要理解文件上传的基本流程。在...