struts1文件上传和下载 连接 使用Struts1实现文件上传(二)

struts1文件上传和下载

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 0;
   String type file.getFileName();
   while(i!=-1){
   //找到上传文件的类型的位置,这个地方的是'.'
    type.indexOf(".");
   
    
    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;
    }

}


index.jsp 

< 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" >< 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 >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值