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如何处理文件上传和下载操作。 1. 文件上传: 在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
2. **配置Action**:创建一个Struts2 Action类,定义接收上传文件的字段,例如`private File file;`和对应的属性访问器。 3. **设置表单**:在HTML或JSP页面中,创建一个`<form>`元素,指定`enctype="multipart/...
Struts2允许设置最大上传文件大小,并通过`filter-mapping`配置限制可接受的MIME类型。 6. **错误处理与反馈**: 在处理文件上传和下载时,可能会出现各种异常,如文件不存在、磁盘空间不足等。因此,需要适当的错误...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户通过表单提交的文件,或者允许用户从服务器下载文件。这些功能极大地增强了Web应用的交互性和实用性。 在Struts2中实现文件上传,主要涉及到以下几...
Struts2是一个流行的Java Web框架,它为开发者提供了...通过研究这个项目,你可以更深入地了解Struts2的文件操作,包括上传和下载的流程、错误处理以及与前端交互的细节。这对于任何Java Web开发者来说都是宝贵的经验。
在实际开发中,确保对上传文件进行安全检查,防止恶意文件上传,同时合理管理下载资源,优化用户体验。 总之,Struts2的文件上传和下载功能是基于Commons FileUpload库实现的,通过配置Struts2拦截器和编写Action...
1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...
避免路径遍历攻击,确保文件存储在安全目录下,防止恶意文件的执行,以及检查上传文件的大小和类型,防止过大文件导致服务崩溃或恶意文件注入。 在本例中,提供的"updown"可能是一个包含示例代码、配置文件或测试...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...