`
sd8089730
  • 浏览: 258763 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

struts1.x上传下载

阅读更多

首先建立一个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;
    }

}

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>

分享到:
评论

相关推荐

    struts1.x 上传下载

    在处理用户交互,特别是涉及文件上传和下载功能时,Struts1.x提供了强大的支持。以下是对"struts1.x 上传下载"这个主题的详细解释。 **一、Struts1.x文件上传** 在Struts1.x中,文件上传主要依赖于`org.apache....

    struts1.x多文件上传

    Struts1.x提供了处理多文件上传的功能,使得开发者可以方便地集成到自己的应用程序中。 在Struts1.x中实现多文件上传,主要涉及以下几个核心概念和步骤: 1. **表单设计**:首先,你需要创建一个HTML表单,包含`...

    搭建struts1.x的jar包

    在Struts 1.x中,如果需要在表单中处理文件上传,这个库是必不可少的。 搭建Struts 1.x环境的步骤通常包括以下几点: 1. 将这些jar包添加到你的项目类路径中。 2. 创建`struts-config.xml`配置文件,定义Action、...

    使用struts1.x上传多个文件的一中方法

    在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的表单时需要包含多个文件。下面我们将详细介绍如何使用Struts1.x来实现多个文件的上传。 首先,我们需要在HTML表单中添加`...

    Struts1.x 中文帮助文档

    Struts1.x是Apache软件基金会旗下Jakarta项目的一个核心组件,它是一款开源的MVC(Model-View-Controller)框架,用于构建企业级Java Web应用程序。这个框架在2000年代初非常流行,因其规范化的开发流程和强大的功能...

    Struts1.x其它文本编辑器使用SQL2005.rar

    Struts1.x提供了一套文件上传的机制,包括临时文件的处理、文件大小限制等。 6. **错误和异常处理**: - 如何使用Struts1.x的ActionError和ActionMessages来处理和显示应用程序中的错误信息。 - 异常处理机制,如...

    Struts1.x的上传文件示例

    在Struts1.x中,实现文件上传功能是一个常见的需求,这通常涉及到处理用户通过表单提交的二进制数据,如图片、文档等。本示例将深入探讨如何在Struts1.x中实现文件上传功能。 首先,你需要在Struts的配置文件...

    struts1.x上传实例

    struts1.x上传实例 struts文件上传,struts upload组件文件上传 最基本的实例,将文件上传到应用服务器里 1.upload.jsp内容 &lt;form action="fileup.do" method="post" enctype="multipart/form-data" &gt; 文件:...

    搭建struts1.x环境例子源码

    由于上传限制,你需要从提供的链接或其它可靠来源下载Struts1.2的jar包,包括struts-core.jar、struts-bean.jar、struts-chain.jar、struts-config.jar等。将这些jar文件放入项目的WEB-INF/lib目录下,确保项目可以...

    Struts1.x.pdf

    ### Struts 1.x 在MVC架构中的角色与工作流程详解 #### Struts 概述与MVC设计模式实现 Struts是Apache软件基金会赞助的一个开源项目,它为基于Java的Web应用程序提供了一种实现MVC(Model-View-Controller)设计...

    Struts1.x实现防止提交的Token使用示例

    Struts1.x是一个经典的MVC框架,用于构建Java Web应用程序。在Web开发中,防止重复提交和跨站请求伪造(CSRF)攻击是常见的安全需求。Token机制是一种有效的防护手段,它通过在表单中添加一个唯一的、随机的令牌值,...

    struts 1.x学习笔记

    ### Struts 1.x 学习笔记 #### 一、MVC 概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用程序开发中非常常见。它将应用程序分为三个核心部分: 1. **模型(Model)**...

    Struts2.3.15.1版本升级到2.3.32详细流程

    该漏洞同样影响到了Struts 2.3.32之前的2.3.x版本以及2.5.10.1之前的2.5.x版本。S2-046被认为是极其危险的漏洞,一旦被利用,将可能引起数据泄露、网页篡改等严重后果。 #### 升级指南 为了解决上述安全问题,最...

    struts2.x文件上传

    1. **Struts2文件上传组件** Struts2提供了`struts2-core`库中的`FileUploadInterceptor`拦截器来处理文件上传请求。这个拦截器能够解析请求中的multipart/form-data数据,将文件内容转换为Action类中的属性。 2. ...

    struts2.ppt struts2.ppt 我们老师发的PPT

    首先,要开发Struts2应用,你需要从Apache官方网站下载Struts2的最新版本,通常是struts-2.x.x-all.zip。解压缩后,找到lib目录下的jar文件,这些文件是开发Struts2应用所必需的。基础的依赖包括: 1. struts2-core-...

    struts2.jar包(struts2.1.8.jar包)三号文件(太大总共分三次)

    描述中的“struts2.jar包struts2.1.jar包struts2.1.8.jar包”可能是在强调Struts2的不同版本,其中“struts2.1.jar”可能是对Struts2 2.1.x系列的泛指,而“struts2.1.8.jar”则是具体的版本号。每个版本都有其特性...

    Struts+1.x文件的上传和下载.txt

    在探讨《Struts+1.x文件的上传和下载》这一主题时,我们主要聚焦于如何在Struts框架下实现文件的上传与下载功能。Struts是Apache开发的一款用于构建企业级Java Web应用的开源框架,它遵循MVC(Model-View-Controller...

    struts-1.x框架所需jar包整合

    Struts 1.x框架是Apache组织开发的一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。在2000年代初期,它极大地推动了Java Web开发的标准化,提供了强大的动作调度、视图渲染和业务逻辑管理等...

Global site tag (gtag.js) - Google Analytics