以下是接收参数的actionForm
package com.cs.formbean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
public class FileUpActionForm extends ActionForm {
private String title ;
private FormFile upfile ;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public FormFile getUpfile() {
return upfile;
}
public void setUpfile(FormFile upfile) {
this.upfile = upfile;
}
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
//可以在此判断文件的后缀名,用来阻挡不合格的上传文件
return super.validate(mapping, request);
}
}
fileup.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<form action="fileup.do" method="post" enctype="multipart/form-data" >
标题:<input type="text" name="title" /><br>
文件:<input type="file" name="upfile" /><br>
<input type="submit" value="上传" >
</form>
</body>
</html>
action中的上传
private Share saveUpFile(FileUpActionForm taform ) {
//upfile封装在了FileUpActionForm 中的upfile属性
//定义流对象,这里用的是缓冲流
FileOutputStream fos = null ;
InputStream is = null ;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//获取upfile对象
FormFile formFile = taform.getUpfile() ;
//建立文件流
File newFile = new File ("d:\\share\\"+formFile.getFileName()) ;
fos = new FileOutputStream(newFile) ;
is = formFile.getInputStream() ;
bis = new BufferedInputStream(is) ;
bos = new BufferedOutputStream(fos) ;
//缓冲区定义为4K
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
} catch (FileNotFoundException e) {
throw new SystemException("文件目录不存在");
} catch (IOException e) {
throw new SystemException("上传失败!");
}finally{
try {
bos.flush();
fos.close();
is.close();
bis.close();
bos.close();
} catch (IOException e) {
throw new SystemException("关闭IO流遇到异常") ;
}
}
shareMgr.addFile(share) ;
return share ;
}
下载:
假定存在资源文件d:\\share目录
在struts的Action中的下载方法
前提,上传的时候,在数据库中存的只是资源文件的路径,所以从数据库中读取到的是路径
而非真正的文件
public ActionForward download(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
/*
* 下载需要三个参数
* 1.path:建立文件流的时候获取路径
* 2.name:下载到本地想自己改个名字,所以要获取本地名
* 3.size:可要可不要
*/
//建立流对象
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
FileUpActionForm taform = (FileUpActionForm)form ;
//这里存在中文乱码的问题
//所以要先读取路径的前半部分
String path = taform.getPath().substring(0, taform.getPath().lastIndexOf("\\")) ;
//下载的时候,下载到本地的名称由用户输入,且封装在了
//FileUpActionForm 中的name中
try {
//转码
path = path +"\\"+ new String(taform.getName().getBytes("iso8859-1"),"gbk") ;
} catch (UnsupportedEncodingException e1) {
throw new SystemException("不支持的编码转换") ;
}
System.out.println("path = "+path);
File downfile = new File(path) ;
if(!downfile.exists()){
throw new SystemException("文件不存在") ;
}
int size = (int)taform.getSize() ;
//如果是从服务器上取就用这个获得系统的绝对路径方法。
try {
fis = new FileInputStream(downfile) ;
bis = new BufferedInputStream(fis);
//首先要拿到这个流对象 ,然后才能写到本地去
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
//这个就就是弹出下载对话框的关键代码
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition",
"attachment;filename=" +
URLEncoder.encode(path, "utf-8"));
response.setContentLength(taform.getSize());
int bytesRead = 0;
//用输入流进行先读,然后用输出流去写(缓冲输入输出流)
byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
} catch (FileNotFoundException e) {
throw new SystemException("文件没找到") ;
} catch (UnsupportedEncodingException e) {
throw new SystemException("不支持的编码转换") ;
} catch (IOException e) {
throw new SystemException("I/O异常") ;
} finally{
try {
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
} catch (IOException e) {
throw new SystemException("关闭IO流遇到异常") ;
}
}
return mapping.findForward("share") ;
}
分享到:
相关推荐
Struts上传 #### 1.1 ActionForm 在Struts中,`ActionForm` 类是用于收集用户输入的数据。对于文件上传,我们需要创建一个继承自 `org.apache.struts.upload.FormFile` 的类,例如 `UploadForm`,在这个类中定义一...
以下是对Struts上传下载源代码的详细解释: 1. **struts-config.xml配置**: 在Struts配置文件`struts-config.xml`中,可以看到针对上传、下载、列表和删除操作的四个`<action>`元素。这些元素定义了不同操作的...
在这个"Struts上传下载实例"中,我们将会探讨如何在Struts框架下实现文件的上传和下载功能,这对于开发涉及用户交互和数据交换的Web应用来说至关重要。 首先,让我们了解上传功能。在Struts中,文件上传主要依赖于`...
这个"struts上传下载例子"展示了如何在Struts中实现文件上传和下载的功能,这对于任何处理用户数据交互的Web应用都是必不可少的。下面我们将深入探讨相关知识点。 首先,我们来理解MVC模式。在MVC架构中,模型...
在本"struts上传下载完整dome"中,我们将深入探讨如何在Struts框架下实现文件的上传与下载功能。 一、Struts2文件上传 1. **依赖库**:Struts2的文件上传功能依赖于`commons-fileupload`和`commons-io`两个库。你...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
提供的压缩文件`struts实现上传下载源码及文档`应该包含了完整的实现示例,包括Action类、ActionForm、JSP页面以及使用说明。通过阅读源码和文档,你可以更深入地理解如何在实际项目中应用这些技术。 总之,解决...
在Struts中,文件上传和下载是常见的功能需求,尤其在构建动态网站或Web应用时。 文件上传是指用户通过网页界面将本地文件发送到服务器的过程。在Struts中,这通常涉及到以下关键知识点: 1. **ActionForm**:...
接着是`struts1和struts2分别实现文件上传下载.rar`,这个文件涵盖了Struts 1和Struts 2两个版本的实现。Struts 1与Struts 2在处理文件上传的方式上有一些不同。在Struts 1中,文件上传通常通过`FileUploadAction`或...
这个"struts2_上传下载"实例则涵盖了多种实现这些功能的方法。 首先,Struts2的文件上传依赖于Apache的Commons FileUpload库。在配置Struts2的Action类时,需要引入相应的依赖,并在Action类中定义一个类型的字段来...
在Struts2进行文件上传下载时,可能需要以下jar包: - `struts2-core.jar`:Struts2的核心库,包含Action、Result等核心组件。 - `xwork-core.jar`:XWork框架的库,Struts2是基于XWork构建的。 - `struts2-...
Struts框架是Java Web开发中常用的一个开源MVC框架,由Apache软件基金会维护...以上是对Struts框架中文件上传下载功能的详细解析,希望对你理解这一主题有所帮助。如需进一步讨论,可以加入指定的QQ群或通过邮件联系。
下面将详细讲解Struts实现文件上传下载的原理和步骤。 ### 文件上传 1. **依赖库**:首先,需要引入Apache的Commons FileUpload和Commons IO库。这两个库提供了处理文件上传的功能。 2. **配置struts.xml**:在...
在这个"用struts和jdbc做的一个上传下载系统"中,我们可以看到Struts框架被用来处理用户请求,实现上传和下载功能,而JDBC(Java Database Connectivity)则用于与数据库进行交互,存储和检索文件信息。 首先,...
在Struts框架中,实现文件上传和下载功能是常见的需求,尤其在处理用户交互、数据交换等方面。 一、文件上传 1. **原理**:文件上传主要涉及到HTTP协议中的multipart/form-data编码类型。在HTML表单中,通过设置`...
1.直接import到MyEclipse直接运行。 2.包含上传一个文件和多个文件 3.struts上传 用到包commons-fileupload-1.2.1.jar commons-io-1.4.jar(项目中已经有) 4.附带图片
在Struts框架中,处理文件上传和下载是常见的功能需求。下面,我们将详细讨论Struts中实现文件上传和下载的关键知识点。 一、文件上传 1. **配置Struts2核心过滤器**:在web.xml中,我们需要配置`FilterDispatcher...
在Struts框架中,文件的上传和下载是常见的功能需求,用于实现用户交互,如上传图片、文档等,或者提供资源的下载服务。下面将详细探讨Struts中文件上传和下载的实现机制。 一、文件上传 1. 配置文件:在Struts2中...