/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.action;
import com.form.FileForm;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.util.Calendar;
import java.util.Vector;
import org.apache.struts.upload.*;
import tools.ListPage;
import java.io.*;
import java.net.URLEncoder;
/**
* MyEclipse Struts
* Creation date: 03-29-2008
*
* XDoclet definition:
* @struts.action path="/fileAction" name="fileForm" parameter="method" scope="request"
*/
public class FileAction extends DispatchAction {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
//文件上传
public ActionForward upload(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
final String fileExt="gif,GIF,jpg,JPG,jpeg,JPEG";
final int maxSize=409600;
FileForm fileForm = (FileForm) form;// TODO Auto-generated method stub
ActionMessages messages=new ActionMessages();
boolean flag=true;
if(fileForm.getName().equals(""))
{
flag=false;
messages.add("nameerror",new ActionMessage("name.error"));
}
if(fileForm.getUser().equals(""))
{
flag=false;
messages.add("usererror",new ActionMessage("user.error"));
}
if(fileForm.getFile().getFileSize()==0)
{
flag=false;
messages.add("fileerror",new ActionMessage("file.error"));
}
else
{
FormFile f=fileForm.getFile();
int fileSize=f.getFileSize();
int i=f.getFileName().indexOf(".");
String ext=f.getFileName().substring(i+1);
if(fileExt.indexOf(ext)==-1)
{
flag=false;
messages.add("fileexterror",new ActionMessage("file.ext.error"));
}
if(fileSize>maxSize)
{
flag=false;
messages.add("filesizeerror",new ActionMessage("file.size.error"));
}
}
HttpSession session=request.getSession();
if(request.getParameter("validate").equals(""))
{
flag=false;
messages.add("validatenull",new ActionMessage("validate.null.error"));
}
else if(!request.getParameter("validate").equals((String)session.getAttribute("valicode")))
{
flag=false;
messages.add("validateerror",new ActionMessage("validate.error"));
}
if(!flag)
{
saveErrors(request,messages);
return mapping.findForward("error");
}
FormFile file=fileForm.getFile();
String dir=servlet.getServletContext().getRealPath("/");
int size=file.getFileSize();
//System.out.println(size);
String fileName=uploadFile(dir,file);
String path="/"+fileName;
fileForm.setPath(path);
fileForm.setSize(file.getFileSize());
fileForm.setTime(new Date().toLocaleString());
ListPage listPage=new ListPage();
listPage.insert(fileForm);
/*
* 若insert方法返回值为flase说明插入数据库失败;
* 调用deleteImage(path)方法删除上传好的图片;
* messages.add("filefailed",new ActionMessage("file.failed"));
* return mapping.findForward("error");
*/
messages.add("filesuccess",new ActionMessage("file.success"));
saveMessages(request,messages);
return mapping.findForward("success");
}
//文件下载
public ActionForward download(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
String path=request.getParameter("path");
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
OutputStream os=null;
InputStream is=null;
String filePath=servlet.getServletContext().getRealPath("/"+path);
try
{
File downloadFile=new File(filePath);
is=new FileInputStream(downloadFile);
bis=new BufferedInputStream(is);
os=response.getOutputStream();
bos=new BufferedOutputStream(os);
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(path,"utf-8"));
int bytesRead=0;
byte[] buffer=new byte[8192];
while((bytesRead=bis.read(buffer,0,8192))!=-1)
{
bos.write(buffer, 0, bytesRead);
}
bos.flush();
is.close();
bis.close();
os.close();
bos.close();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
public String uploadFile(String dir,FormFile file)
{
String fname=file.getFileName();
int i=fname.indexOf(".");
String type=fname.substring(i+1);
Calendar calendar = Calendar.getInstance();
String fileName="files/"+calendar.get(Calendar.YEAR) + (calendar.get(Calendar.MONTH)+1) + calendar.get(Calendar.DAY_OF_MONTH) +calendar.get(Calendar.HOUR_OF_DAY)+calendar.get(Calendar.MINUTE)+calendar.get(Calendar.SECOND)+calendar.get(Calendar.MILLISECOND)+Math.round(Math.random()*100*1000)+"."+type;
//System.out.println(fileName);
try
{
InputStream in=file.getInputStream();
String path=dir+fileName;
OutputStream out=new FileOutputStream(path);
int bytesRead=0;
byte[] buffer=new byte[8192];
while((bytesRead=in.read(buffer, 0, 8192))!=-1)
{
out.write(buffer, 0, bytesRead);
}
out.close();
in.close();
}
catch(Exception e)
{
e.printStackTrace();
}
file.destroy();
return fileName;
}
}