`

struts2上传和下载文件

阅读更多
package com.zx.example.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;

import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.zx.example.util.ConfigHelper;


@SuppressWarnings("serial")
public class FileAction extends ActionSupport {
	
    private static final Log log=LogFactory.getLog(FileAction.class);
    
	private File[] myFile;  //上传的文件
	
    public File[] getMyFile() {
		return myFile;
	}

	public void setMyFile(File[] myFile) {
		this.myFile = myFile;
	}
	
	private String[] myFileFileName; //上传的文件名
	
	public String[] getMyFileFileName() {
		return myFileFileName;
	}

	public void setMyFileFileName(String[] myFileFileName) {
		this.myFileFileName = myFileFileName;
	}
	
	private String[] myFileContentType; //上传的文件类型
	
	public String[] getMyFileContentType() {
		return myFileContentType;
	}

	public void setMyFileContentType(String[] myFileContentType) {
		this.myFileContentType = myFileContentType;
	}
	
	private String uploadDir;  //上传的目录

	public String getUploadDir() {
		return uploadDir;
	}

	public void setUploadDir(String uploadDir) {
		this.uploadDir = uploadDir;
	}
	
	
	public String fileUpload(){
		
		String fileDir=ServletActionContext.getServletContext().getRealPath(uploadDir);
		log.info("fileDir="+fileDir);
		for(int i=0;i<myFile.length;i++)	
		{   
			 log.info("myFileFileName["+i+"]="+myFileFileName[i]);
		     log.info("myFileContentType["+i+"]="+myFileContentType[i]);
		     
			 int pot=myFileFileName[i].lastIndexOf(".");
			 String suffix=myFileFileName[i].substring(pot,myFileFileName[i].length());
			 log.info("suffix="+suffix);
			 String newFileName=createNewFileName()+i+suffix;
			 log.info("newFileName="+newFileName);
			    
			 File dir=new File(fileDir);
			 if(!dir.exists())
			 {
			    dir.mkdir();
			  }
			   
			File newFile=new File(dir,newFileName);
			    
			copyFile(myFile[i], newFile);
			
		}
	   
		
		return SUCCESS;
	}

	
	
	/**
	 * 将源文件内容copy到目标文件中
	 * @param src 源文件,页面上传的文件
	 * @param dst 目标文件,重新命名并保存到服务器上的新文件
	 * @throws Exception
	 */
	public void copyFile(File src,File dst){
    	InputStream is=null;
    	OutputStream os=null;
    	try{
    		
    	  is = new BufferedInputStream(new FileInputStream(src));
          os = new BufferedOutputStream(new FileOutputStream(dst));
          byte buffer[] = new byte[8192];
          int len = 0;
          while((len = is.read(buffer))!=-1)
          {
             os.write(buffer, 0, len);
           }
        
     	}catch(IOException e){
     		
     		e.printStackTrace();
     		
     	}finally{
     		try{
     			if(is!=null)
     			{
     				is.close();
     			}
     				
     		}catch(IOException e)
     		{
     			e.printStackTrace();
     		}
     		
     		try{
     			if(os!=null)
     			{
     				os.close();
     			}
     				
     		}catch(IOException e)
     		{
     			e.printStackTrace();
     		}
     	}
    	
    }
	
	/**
	 * 利用系统当前时间生成新的文件名称
	 * @return
	 */
	public String createNewFileName(){
		Calendar now=Calendar.getInstance();
        String targetName=String.valueOf(now.get(now.YEAR))+String.valueOf(now.get(now.MONTH)+1);
        targetName+=String.valueOf(now.get(now.DAY_OF_MONTH))+String.valueOf(now.get(now.HOUR_OF_DAY));
        targetName+=String.valueOf(now.get(now.MINUTE))+String.valueOf(now.get(now.SECOND));
        return targetName;
	}
	
	/**
	 * 文件下载
	 * @throws  
	 * @throws IOException
	 */
	public void fileDownload(){
	   try{
		   
		ConfigHelper config=new ConfigHelper();  
		HttpServletResponse response=ServletActionContext.getResponse();
		String uploadDir=config.getMessage("upload");
		System.out.println("uploadDir="+uploadDir);
		String fileName="局数据制作单模板.xls";
		String template=config.getMessage("template_excel");
		File templateFile=new File(template);
		
		//将模板文件的内容拷贝到新文件中并保存到upload目录下
		File dir=new File("uploadDir");
		if(!dir.exists())
		{
			System.out.println("upload目录不存在");
			dir.mkdir();
		}
		File newFile=new File(dir,fileName);
		copy(templateFile,newFile);
		
		Workbook wb=Workbook.getWorkbook(newFile);
		WritableWorkbook book=Workbook.createWorkbook(newFile, wb);
		WritableSheet sheet=book.getSheet(0);
		
		 //属性样式定义
        WritableCellFormat itemFormat=new WritableCellFormat();
    	itemFormat.setAlignment(jxl.format.Alignment.CENTRE);
    	itemFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
    	itemFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
	  
		Label label=null;
		label=new Label(1,0,"河南工业大学2009",itemFormat);
		sheet.addCell(label);
		label=new Label(4,0,"2009-03-16",itemFormat);
		sheet.addCell(label);
		label=new Label(8,0,"紧急",itemFormat);
		sheet.addCell(label);
		
		label=new Label(1,1,"彭怀义",itemFormat);
		sheet.addCell(label);
		label=new Label(4,1,"郑州市正信科技发展有限公司",itemFormat);
		sheet.addCell(label);
		label=new Label(8,1,"13526884003",itemFormat);
		sheet.addCell(label);
		label=new Label(11,1,"penghuaiyi@163.com",itemFormat);
		sheet.addCell(label);
		int j=3;
		while(j<10)
		{
			for(int i=0;i<24;i++)
			{
				label=new Label(i,j,"love",itemFormat);
				sheet.setRowView(j, 400);
				sheet.addCell(label);
			}
			j++;
		}
		book.write();
		book.close();
		wb.close();
		
		InputStream is=new BufferedInputStream(new FileInputStream(newFile));
		OutputStream os=new BufferedOutputStream(response.getOutputStream());
		fileName=new String(fileName.getBytes("GBK"),"ISO-8859-1");
		response.reset();
		response.setContentType("application/x-msdownload");
		response.setContentLength((int)newFile.length());
		response.setHeader("Content-Disposition", "attachment;filename="+fileName);
		
		byte[] buffer=new byte[8192];
		int len=0;
		while((len=is.read(buffer))!=-1)
		{
			os.write(buffer, 0, len);
		}
		is.close();
		os.close();
		
	   }catch(Exception e){
		   System.out.println("---->error="+e.getMessage());
		   e.printStackTrace();
	   }
	}
	
	/**
	 * 将templateFile的内容拷贝到newFile中
	 * @param templateFile
	 * @param newFile
	 */
	private void copy(File templateFile,File newFile)
	{
		try{
			
		InputStream is=new FileInputStream(templateFile);
		OutputStream os=new FileOutputStream(newFile);
		
		byte[] buffer=new byte[1024*4];
		
		int len=0;
		while((len=is.read(buffer))!=-1)
		{
			os.write(buffer, 0, len);
		}
		
		is.close();
		os.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	
}

分享到:
评论

相关推荐

    struts2上传和下载文件详细源码

    在这个"struts2上传和下载文件详细源码"中,我们可以深入理解Struts2如何处理文件上传和下载操作。 1. 文件上传: 在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件...

    struts2文件上传下载源代码

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

    struts2实现文件上传下载

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

    Struts2 上传和下载功能

    2. **配置Action**:创建一个Struts2 Action类,定义接收上传文件的字段,例如`private File file;`和对应的属性访问器。 3. **设置表单**:在HTML或JSP页面中,创建一个`&lt;form&gt;`元素,指定`enctype="multipart/...

    struts2文件上传和下载

    Struts2允许设置最大上传文件大小,并通过`filter-mapping`配置限制可接受的MIME类型。 6. **错误处理与反馈**: 在处理文件上传和下载时,可能会出现各种异常,如文件不存在、磁盘空间不足等。因此,需要适当的错误...

    struts2文件上传下载

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

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

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

    struts文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户通过表单提交的文件,或者允许用户从服务器下载文件。这些功能极大地增强了Web应用的交互性和实用性。 在Struts2中实现文件上传,主要涉及到以下几...

    struts2上传下载项目

    Struts2是一个流行的Java Web框架,它为开发者提供了...通过研究这个项目,你可以更深入地了解Struts2的文件操作,包括上传和下载的流程、错误处理以及与前端交互的细节。这对于任何Java Web开发者来说都是宝贵的经验。

    struts2 文件的上传和下载

    在实际开发中,确保对上传文件进行安全检查,防止恶意文件上传,同时合理管理下载资源,优化用户体验。 总之,Struts2的文件上传和下载功能是基于Commons FileUpload库实现的,通过配置Struts2拦截器和编写Action...

    struts2实现多文件上传下载

    1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    struts2文件上传与下载

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

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

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

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

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

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

    避免路径遍历攻击,确保文件存储在安全目录下,防止恶意文件的执行,以及检查上传文件的大小和类型,防止过大文件导致服务崩溃或恶意文件注入。 在本例中,提供的"updown"可能是一个包含示例代码、配置文件或测试...

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    struts2 文件上传

    struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload

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

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

Global site tag (gtag.js) - Google Analytics