首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts下传上载_使用struts自己的upload组件

2012-10-07 
struts上传下载_使用struts自己的upload组件Java代码首先建立一个FileActionpackage com.actionimport or

struts上传下载_使用struts自己的upload组件
Java代码
首先建立一个FileAction   
  
package com.action;   
import org.apache.struts.action.*;   
import javax.servlet.http.*;   
import com.actionForm.FileActionForm;   
import org.apache.struts.actions.DispatchAction;   
import java.util.Date;   
import java.text.*;   
import org.apache.struts.upload.FormFile;   
import java.io.*;   
import java.net.URLEncoder;   
import com.dao.*;   
  
public class FileAction extends DispatchAction {   
  
    private JDBConnection connection =new JDBConnection();   
//以下方法实现文件的上传   
    public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,   
                                    HttpServletRequest request,   
                                    HttpServletResponse response) throws  
            Exception {   
     ActionForward forward=null;   
        Date date = new Date();   
        FileActionForm fileActionForm = (FileActionForm) form;   
        //FormFile用于指定存取文件的类型   
        FormFile file = fileActionForm.getFile(); //获取当前的文件   
      // 获得系统的绝对路径  String dir = servlet.getServletContext().getRealPath("/image");   
        //我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\   
        String dir="D:\\loadfile\\temp\";  
        int i = 0;  
  String type = file.getFileName();  
  while(i!=-1){  
   //找到上传文件的类型的位置,这个地方的是'.'  
   i = type.indexOf(".");  
  /* System.out.println(i);*/  
   /*截取上传文件的后缀名,此时得到了文件的类型*/  
   type = type.substring(i+1);  
  }  
  // 限制上传类型为jpg,txt,rar;  
  if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))  
     
  {//当上传的类型不为上述类型时,跳转到错误页面。  
    forward=mapping.findForward("error");  
  }  
  else  
  {    
//    将上传时间加入文件名(这个地方的是毫秒数)     
     String times = String.valueOf(date.getTime());  
    //组合成 time.type  
         String  fname = times + "." + type;  
       //InInputStream是用以从特定的资源读取字节的方法。  
          InputStream streamIn = file.getInputStream();    //创建读取用户上传文件的对象  
          //得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available();  
         // int ok=streamIn.available();             
          int ok=file.getFileSize();  
          String strFee = null;  
          //这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte;  
            
          if(ok>=1024*1024)  
          {  
           float ok1=(((float)ok)/1024f/1024f);   
           DecimalFormat myformat1 = new DecimalFormat("0.00");           
          strFee = myformat1.format(ok1)+"M";  
                 System.out.println(strFee+"M");  
          }  
          else if(ok>1024 && ok<=1024*1024)  
          {  
             double  ok2=((double)ok)/1024;  
             DecimalFormat myformat2=new DecimalFormat("0.00");  
            strFee = myformat2.format(ok2)+"kb";  
                 System.out.println(strFee+"kb");  
          }  
          else if(ok<1024)  
          {  
           System.out.println("aaaaaaaaa");  
           strFee=String.valueOf(ok)+"byte";  
           System.out.println(strFee);  
             
          }  
          System.out.println( streamIn.available()+"文件大小byte");  
          //这个是io包下的上传文件类  
          File uploadFile = new File(dir);   //指定上传文件的位置  
          if (!uploadFile.exists() || uploadFile == null) {  //判断指定路径dir是否存在,不存在则创建路径  
              uploadFile.mkdirs();  
          }  
          //上传的路径+文件名  
          String path = uploadFile.getPath() + "\" + fname;  
       //OutputStream用于向某个目标写入字节的抽象类,这个地方写入目标是path,通过输出流FileOutputStream去写  
          OutputStream streamOut = new FileOutputStream(path);  
          int bytesRead = 0;  
          byte[] buffer = new byte[8192];  
          //将数据读入byte数组的一部分,其中读入字节数的最大值是8192,读入的字节将存储到,buffer[0]到buffer[0+8190-1]的部分中  
          //streamIn.read方法返回的是实际读取字节数目.如果读到末尾则返回-1.如果bytesRead返回为0则表示没有读取任何字节。  
          while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {  
           //写入buffer数组的一部分,从buf[0]开始写入并写入bytesRead个字节,这个write方法将发生阻塞直至字节写入完成。  
              streamOut.write(buffer, 0, bytesRead);  
          }  
        //  关闭输出输入流,销毁File流。  
          streamOut.close();  
          streamIn.close();  
          file.destroy();      
          String paths=path;  
          System.out.println(paths);  
         String fileName = Chinese.toChinese(fileActionForm.getFileName()); //获取文件的名称  
        //String fileSize = String.valueOf(file.getFileSize());  
         String fileDate = DateFormat.getDateInstance().format(date);  
         String sql = "insert into tb_file values('" + fileName + "','" +  
         strFee + "','" + fileDate + "','" + paths + "')";  
         connection.executeUpdate(sql);  
         connection.closeConnection();  
         forward=mapping.findForward("upLoadFileResult");  
  }  
        return forward;  
    }  
    //实现文件的下载  
    public ActionForward downFile(ActionMapping mapping, ActionForm form,  
                                  HttpServletRequest request,  
                                  HttpServletResponse response) throws  
            Exception {  
        String path = request.getParameter("path");  
        System.out.println(path+"111");  
        BufferedInputStream bis = null;  
        BufferedOutputStream bos = null;  
        OutputStream fos = null;  
        InputStream fis = null;  
          
      //如果是从服务器上取就用这个获得系统的绝对路径方法。  String filepath = servlet.getServletContext().getRealPath("/" + path);  
        String  filepath=path;  
        System.out.println("文件路径"+filepath);  
        File uploadFile = new File(filepath);  
        fis = new FileInputStream(uploadFile);  
        bis = new BufferedInputStream(fis);  
        fos = response.getOutputStream();  
        bos = new BufferedOutputStream(fos);  
        //这个就就是弹出下载对话框的关键代码  
        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();   
        fis.close();   
        bis.close();   
        fos.close();   
        bos.close();   
        return null;   
    }   
  
}   
  
FileActionForm   
  
         
  
package com.actionForm;   
  
import org.apache.struts.action.*;   
import org.apache.struts.upload.*;   
  
public class FileActionForm extends ActionForm {   
    private String fileName;//上传文件的名称   
    private String fileSize;//上传文件的大小   
    private String filePath;//上传文件到服务器的路径   
    private String fileDate;//上传文件的日期   
    private FormFile file;//上传文件   
  
    public String getFileName() {   
        return fileName;   
    }   
  
    public FormFile getFile() {   
        return file;   
    }   
  
    public String getFileSize() {   
        return fileSize;   
    }   
  
    public String getFilePath() {   
        return filePath;   
    }   
  
    public String getFileDate() {   
        return fileDate;   
    }   
  
    public void setFileName(String fileName) {   
        this.fileName = fileName;   
    }   
  
    public void setFile(FormFile file) {   
        this.file = file;   
    }   
  
    public void setFileSize(String fileSize) {   
        this.fileSize = fileSize;   
    }   
  
    public void setFilePath(String filePath) {   
        this.filePath = filePath;   
    }   
  
    public void setFileDate(String fileDate) {   
        this.fileDate = fileDate;   
    }   
  
}   
 
XML/HTML代码
index.jsp  此位置的form是javabeen的对象,这个javabeen中存取的图片的相关信息   
  
<table width="264" height="81" border="0" align="center" cellpadding="0" cellspacing="0">  
                <tr>  
                  <td width="115"  rowspan="4" align="center"><img src="<%=form.getFilePath()%>" width="100" height="100"></td>  
                  <td width="133" align="center">图片名称:<%=form.getFileName()%></td>  
                </tr>  
                <tr align="center">  
                  <td>图片大小:<%=form.getFileSize()%></td>  
                </tr>  
                <tr align="center">  
                  <td>上传日期:<%=form.getFileDate()%></td>  
                </tr>  
                <tr>  
                  <td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>  
  
  
                  </td>  
                </tr>  
            </table>  
  
<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">  
        <table height="52" border="0" align="center" cellpadding="0" cellspacing="0">  
          <tr align="center">  
            <td width="60" height="26">图片名称:</td>  
            <td width="160"> <html:text property="fileName"/> </td>  
            <td width="60">图片路径:</td>  
            <td width="198"> <html:file property="file"/> </td>  
          </tr>  
          <tr align="right">  
            <td height="26" colspan="4"> <html:submit>上传</html:submit> </td>  
          </tr>  
        </table>  
  </html:form>  
  
struts-config.xml      
  
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">  
  
<struts-config>  
  <form-beans>  
    <form-bean name="fileActionForm" type="com.actionForm.FileActionForm" />  
  </form-beans>  
  <action-mappings>  
    <action name="fileActionForm" parameter="method" path="/fileAction" scope="request" type="com.action.FileAction" validate="true">  
        <forward name="upLoadFileResult" path="/result.jsp"/>  
        <forward name="error" path="/fail.jsp"></forward>  
    </action>  
  </action-mappings>  
  <message-resources parameter="ApplicationResources" />  
</struts-config>  




热点排行