`

struts上传下载

阅读更多
以下是接收参数的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 上传下载

    Struts上传 #### 1.1 ActionForm 在Struts中,`ActionForm` 类是用于收集用户输入的数据。对于文件上传,我们需要创建一个继承自 `org.apache.struts.upload.FormFile` 的类,例如 `UploadForm`,在这个类中定义一...

    struts上传下载源代码

    以下是对Struts上传下载源代码的详细解释: 1. **struts-config.xml配置**: 在Struts配置文件`struts-config.xml`中,可以看到针对上传、下载、列表和删除操作的四个`&lt;action&gt;`元素。这些元素定义了不同操作的...

    struts上传下载实例

    在这个"Struts上传下载实例"中,我们将会探讨如何在Struts框架下实现文件的上传和下载功能,这对于开发涉及用户交互和数据交换的Web应用来说至关重要。 首先,让我们了解上传功能。在Struts中,文件上传主要依赖于`...

    struts上传下载例子

    这个"struts上传下载例子"展示了如何在Struts中实现文件上传和下载的功能,这对于任何处理用户数据交互的Web应用都是必不可少的。下面我们将深入探讨相关知识点。 首先,我们来理解MVC模式。在MVC架构中,模型...

    struts上传下载完整dome

    在本"struts上传下载完整dome"中,我们将深入探讨如何在Struts框架下实现文件的上传与下载功能。 一、Struts2文件上传 1. **依赖库**:Struts2的文件上传功能依赖于`commons-fileupload`和`commons-io`两个库。你...

    struts实现的文件上传下载功能

    总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。

    无中文乱码的Struts上传下载(任意文件上传)

    提供的压缩文件`struts实现上传下载源码及文档`应该包含了完整的实现示例,包括Action类、ActionForm、JSP页面以及使用说明。通过阅读源码和文档,你可以更深入地理解如何在实际项目中应用这些技术。 总之,解决...

    struts上传与下载

    在Struts中,文件上传和下载是常见的功能需求,尤其在构建动态网站或Web应用时。 文件上传是指用户通过网页界面将本地文件发送到服务器的过程。在Struts中,这通常涉及到以下关键知识点: 1. **ActionForm**:...

    Struts上传下载范例

    接着是`struts1和struts2分别实现文件上传下载.rar`,这个文件涵盖了Struts 1和Struts 2两个版本的实现。Struts 1与Struts 2在处理文件上传的方式上有一些不同。在Struts 1中,文件上传通常通过`FileUploadAction`或...

    struts2上传下载实例

    这个"struts2_上传下载"实例则涵盖了多种实现这些功能的方法。 首先,Struts2的文件上传依赖于Apache的Commons FileUpload库。在配置Struts2的Action类时,需要引入相应的依赖,并在Action类中定义一个类型的字段来...

    java的Struts上传下载代码及jar包

    在Struts2进行文件上传下载时,可能需要以下jar包: - `struts2-core.jar`:Struts2的核心库,包含Action、Result等核心组件。 - `xwork-core.jar`:XWork框架的库,Struts2是基于XWork构建的。 - `struts2-...

    struts框架-文件上传下载

    Struts框架是Java Web开发中常用的一个开源MVC框架,由Apache软件基金会维护...以上是对Struts框架中文件上传下载功能的详细解析,希望对你理解这一主题有所帮助。如需进一步讨论,可以加入指定的QQ群或通过邮件联系。

    Struts上传下载

    下面将详细讲解Struts实现文件上传下载的原理和步骤。 ### 文件上传 1. **依赖库**:首先,需要引入Apache的Commons FileUpload和Commons IO库。这两个库提供了处理文件上传的功能。 2. **配置struts.xml**:在...

    用struts和jdbc做的一个上传下载系统

    在这个"用struts和jdbc做的一个上传下载系统"中,我们可以看到Struts框架被用来处理用户请求,实现上传和下载功能,而JDBC(Java Database Connectivity)则用于与数据库进行交互,存储和检索文件信息。 首先,...

    struts上传下载文件

    在Struts框架中,实现文件上传和下载功能是常见的需求,尤其在处理用户交互、数据交换等方面。 一、文件上传 1. **原理**:文件上传主要涉及到HTTP协议中的multipart/form-data编码类型。在HTML表单中,通过设置`...

    struts上传下载(包含单个文件和多个文件)

    1.直接import到MyEclipse直接运行。 2.包含上传一个文件和多个文件 3.struts上传 用到包commons-fileupload-1.2.1.jar commons-io-1.4.jar(项目中已经有) 4.附带图片

    struts上传下载详细代码

    在Struts框架中,处理文件上传和下载是常见的功能需求。下面,我们将详细讨论Struts中实现文件上传和下载的关键知识点。 一、文件上传 1. **配置Struts2核心过滤器**:在web.xml中,我们需要配置`FilterDispatcher...

    Struts文件的上传和下载

    在Struts框架中,文件的上传和下载是常见的功能需求,用于实现用户交互,如上传图片、文档等,或者提供资源的下载服务。下面将详细探讨Struts中文件上传和下载的实现机制。 一、文件上传 1. 配置文件:在Struts2中...

Global site tag (gtag.js) - Google Analytics