`
星夜的遐想
  • 浏览: 190585 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2之文件上传和下载

阅读更多

 Struts2 上传和下载的原理:

 

Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件,二下载则是通过输入流InputStream 的方式获得服务端文件,然后设置关联方式为保存而不是打开,就可以了。

 

 

 

首先看看我的上传页面:

 

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  
  <body>
  	<center>

   	<form action="fileAction" method="post" enctype="multipart/form-data">
   		<!-- 
   		上传者的姓名:<input type="text" name="uname" /><br><br>
   		 -->
   		上传文件一:<input type="file" name="files"><br></br>
   		上传文件二:<input type="file" name="files"><br></br>
   		上传文件三:<input type="file" name="files"><br></br>
   		<input type="submit"  name="method:doUpload" value="开始上传"/>
   	</form>
   	</center>
  </body>
</html>

大家一定要注意的事和其他方式文件上传一样form

 

<form action="fileAction" method="post" enctype="multipart/form-data">

 

因为涉及到多文件上传因此我定义了几个相同name属性值的

 

<input type="file" name="files"><br></br>

 

 

 

因为我有用到数据库保存文件的信息因此我定义了一个实体类:

 

package com.lyl.entity;

import java.util.Date;

/**
 * MyFile entity.
 * 
 * @author MyEclipse Persistence Tools
 */

public class MyFile implements java.io.Serializable {

	// Fields

	private String fileId;
	private String fileName;
	private String fileContentType;
	private Date fileUploadDate;

	// Constructors

	/** default constructor */
	public MyFile() {
	}

	// Property accessors

	public String getFileId() {
		return this.fileId;
	}

	public void setFileId(String fileId) {
		this.fileId = fileId;
	}

	public String getFileName() {
		return this.fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public String getFileContentType() {
		return this.fileContentType;
	}

	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}

	public Date getFileUploadDate() {
		return this.fileUploadDate;
	}

	public void setFileUploadDate(Date fileUploadDate) {
		this.fileUploadDate = fileUploadDate;
	}

}

  

然后我们看看后台如何处理上传的,我定义一个FileAction处理

页面如下:

 

 

 

package com.lyl.action;

import java.io.File;
import java.io.FileInputStream;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

import com.lyl.dao.FileDAO;
import com.lyl.dao.FileDaoImpl;
import com.lyl.entity.MyFile;
import com.opensymphony.xwork2.ActionContext;

public class FileAcion {


       用于保存文件的DAO类:

        private FileDAO fileDao=new FileDaoImpl();
	
	//如果不提供set和get方法将不能在页面(通过对象.属性的格式)赋值
	private MyFile myFile = new MyFile();

	// 保存表单页面的上传文件的集合
	private List<File> files;

	// 保存上传文件的文件名的集合
	private List<String> filesFileName;

	// 保存上传文件的类型集合
	private List<String> filesContentType;
	
	
	
	
	
	//下载相关的参数
	
	
	//指定要下载文件的输入流
	private InputStream is;
	
	//指定下载文件的类型
	private String fileType;
	
	//指定下载文件的名字
	private String fileName;
	

	
	
	public String getFileType() {
		return fileType;
	}


	public void setFileType(String fileType) {
		this.fileType = fileType;
	}


	public String getFileName() {
		return fileName;
	}


	public void setFileName(String fileName) {
		this.fileName = fileName;
	}


	public InputStream getIs() {
		return is;
	}


	public void setIs(InputStream is) {
		this.is = is;
	}


	// 上传文件的方法
	public String doUpload() throws Exception {
		
		System.out.println("进入了上传的方法");

		// 定义保存的路径
		ServletContext application = ServletActionContext.getServletContext();

		// 定义相对路径(定义的路为WebRoot目录下的指定位置)
		String realPath = application.getRealPath("/upload");

		for(int i=0;i<files.size();i++){
			
			//以每一个上传文件生成一个输入流
			InputStream is=new FileInputStream(files.get(i));
			
			//创建一个fileId作为文件在硬盘上保存的的名字
			String fileId=UUID.randomUUID().toString().replace("-", "");
			
			//创建个输出流(以目标文件生成的流)
			OutputStream os=new FileOutputStream(new File(realPath+"/"+fileId));
			
			byte [] b=new byte[1024];
			int len=is.read(b);
			while(len !=-1){
				os.write(b, 0 ,b.length);
				len=is.read(b);
			}
			
			os.close();
			is.close();
			
			//给MyFile实体赋值
			
			myFile.setFileId(fileId);
			myFile.setFileName(filesFileName.get(i));
			myFile.setFileContentType(filesContentType.get(i));
		
			fileDao.addFile(myFile);
			
			
		}
			
			
		return "success";

	}
	
	
	//查询所有的的文件
	
	public String listFile(){
		System.out.println("进入了list方法");
		List<MyFile> myFilList=fileDao.listFile();
		ActionContext context=ActionContext.getContext();
		Map request=(Map)context.get("request");
		request.put("myFilList", myFilList);
		
		return "list";
	}
	

	// 下载文件的方法

	public String doDownLoad() throws Exception {
		
		System.out.println("进入了下载的方法");
		
		ServletContext application=ServletActionContext.getServletContext();
		
		//获得文件上传后的路径
		String realPath=application.getRealPath("/upload");
		
		System.out.println("下载文件编号为--"+myFile.getFileId());
		
		myFile=fileDao.loadFile(myFile);
		
		
		
		this.fileName= new String(myFile.getFileName().getBytes(),"ISO8859-1");
		this.fileType=myFile.getFileContentType();
		
		File file=new File(realPath+"/"+myFile.getFileId());
		
		this.is=new FileInputStream(file);
		
		return "down";
		
		
	}

	
	
	
	
	
	
	
	
	
	
	
	
	
	public List<File> getFiles() {
		return files;
	}

	public void setFiles(List<File> files) {
		this.files = files;
	}


	public List<String> getFilesFileName() {
		return filesFileName;
	}


	public void setFilesFileName(List<String> filesFileName) {
		this.filesFileName = filesFileName;
	}


	public List<String> getFilesContentType() {
		return filesContentType;
	}


	public void setFilesContentType(List<String> filesContentType) {
		this.filesContentType = filesContentType;
	}


	public MyFile getMyFile() {
		return myFile;
	}


	public void setMyFile(MyFile myFile) {
		this.myFile = myFile;
	}

	
}

 

 

最后看看,我们的配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<include file="struts-default.xml" />
	
	<package name="myFile" extends="struts-default" >
		<action name="fileAction" class="com.lyl.action.FileAcion">
			<result name="success" type="redirect">/fileAction!listFile.action</result>
			<result name="list">/fileList.jsp</result>
			
			<result name="down" type="stream">
			
				<!-- 内容类型,例如:*.jpg就是image/jpeg -->
				<param name="contentType">${fileType}</param>
				
				<!-- 数据来源 -->
				<param name="inputName">is</param>
				
				<!-- 确保文件是被下载,而非打开 -->
				<param name="contentDisposition">
					attachment;filename="${fileName}"
				</param>
				
				<!-- 缓存大小单位字节 -->
				<param name="bufferSize">4096</param>
			</result>
			
		</action>
	</package>
</struts>

 

 

也就这些了,如有不同的意见可以交流下啊

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    struts2 文件的上传和下载

    在Struts2中,文件的上传和下载是常见的功能需求,特别是在处理用户表单提交、数据交换或者提供资源下载服务时。这篇博客文章将探讨如何在Struts2框架下实现文件的上传和下载操作。 首先,我们需要了解文件上传的...

    struts2实现多文件上传下载

    3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原文件名称 (通过UploadFiles处理) 5.对配置文件中的路径可以进行动态读取(不重启服务器) ...

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...

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

    在这个特定的场景中,我们关注的是如何使用Struts来实现文件的上传和下载功能。这个功能对于任何Web应用来说都是非常重要的,因为它允许用户交互地处理数据和资源。 首先,我们需要理解文件上传的基本流程。在...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2多文件上传和下载

    在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件...

    Struts2多文件上传下载实例

    在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    Struts2之struts2文件上传详解案例struts011

    在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....

    Struts2多个文件上传

    总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...

    Struts2文件上传下载和表单重复提交问题

    综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。

    Struts2实现文件的上传下载

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,提供了丰富的功能,包括文件的上传和下载。在本项目中,我们关注的是如何使用Struts2来实现实时的文件交互操作,即文件的上传与...

    struts2文件上传与下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...

    struts与hibernate实现文件的上传与动态下载

    通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...

    struts1和struts2分别实现文件上传下载功能

    Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...

Global site tag (gtag.js) - Google Analytics