天下大事,必做于细。天下难事,必作于易。

以前见过某些人,基础的知识还不扎实就去学习更难的事,这样必定在学习新的知识会非常迷惑结果

再回来又一次学习一下没有搞懂的知识,这必定会导致学习效率的下降!我写的这篇上传和下载都非常基础。

十分适合刚開始学习的人!

jsp:页面

<!--在进行文件上传时,表单提交方式一定要是post的方式,由于文件上传时二进制文件可能会非常大,还有就是enctype属性。这个属性一定要写成multipart/form-data,
  不然就会以二进制文本上传到server端--> 
  <form action="fileUpload.action" method="post" enctype="multipart/form-data">
      
        file: <input type="file" name="file"><br>
        
        <input type="submit" value="submit">
    </form>

上传action

public class FileUploadAction extends ActionSupport
{
    private String username;
    
   //注意,file并非指前端jsp上传过来的文件本身,而是文件上传过来存放在暂时文件夹以下的文件
    private File file;
    
    //提交过来的file的名字
    private String fileFileName;//必须是input中name值+FileName固定格式
    
    //提交过来的file的MIME类型
    private String fileContentType;//

    public File getFile()
    {
        return file;
    }

    public void setFile(File file)
    {
        this.file = file;
    }

    public String getFileFileName()
    {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName)
    {
        this.fileFileName = fileFileName;
    }

    public String getFileContentType()
    {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType)
    {
        this.fileContentType = fileContentType;
    }
    
    @Override
    public String execute() throws Exception
    {
        String root = ServletActionContext.getServletContext().getRealPath("/upload");//上传的文件的位置
        
        InputStream is = new FileInputStream(file);//基于file创建一个文件输入流
        
        OutputStream os = new FileOutputStream(new File(root, fileFileName));//创建输出流
        
        System.out.println("fileFileName: " + fileFileName);

    // 由于file是存放在暂时文件夹的文件,我们能够将其文件名称和文件路径打印出来,看和之前的fileFileName是否同样
        System.out.println("file: " + file.getName());
        System.out.println("file: " + file.getPath());
        
        byte[] buffer = new byte[1024];
        int length = 0;
        
        while(-1 != (length = is.read(buffer, 0, buffer.length)))//经典写入操作
        {
            os.write(buffer);
        }
        
        os.close();
        is.close();
        
        return SUCCESS;
    }
}

这样就成功的将文件上传了,然后你就去看project中上传的文件夹中有没有你的文件非常遗憾没有,原因是它上传到tomcat/webappsproject中upload的文件夹中了.

下载

jsp页面

下载:
<a href="downloadAction?

fileName=JAVA.doc">下载</a>

DownloadAction:

package com.iss.action;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoad extends ActionSupport {

private String fileName;//要下载的文件名称

private String directory;//要下载的文件文件夹

public void setDirectory(String directory) {
this.directory = directory;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public InputStream getInputStream() throws FileNotFoundException {

String dir = directory + fileName;

System.out.println(dir);//输出的文件要下载的路径

// return ServletActionContext.getServletContext().getResourceAsStream(
// "/" +dir);//使用相对路径下载文件内容默认是和webRoot同一文件夹
return new FileInputStream(dir);//使用全局路径下载

}

@Override
public String execute() throws Exception {
System.out.println("fileName:" + fileName);
return SUCCESS;
}
}

struts.xml中的配置

<!--下载action -->
<action name="downloadAction" class="com.iss.action.DownLoad">
<!-- <param name="directory">/images/</param> -->下载路径为相对路径
<param name="directory">E:/wang/head/</param>下载路径为绝对路径
<result type="stream">//类型是stream类型注意
<!--指定下载文件内容的类型 -->
<param name="contentType">plain/text</param>
<!--inputName默认值inputStream -->

<!--默认值是inputStream指定文件的源头,依据这个配置,找getInputStream方法获得文件流-->
<param name="inputName">inputStream</param>
<!--动态文件获取 -->
<param name="contentDisposition">attachement;fileName="${fileName}"</param>
<!-- 指定下载文件的缓冲大小 -->
<param name="bufferSize">50000000</param>
</result>
<result name="input">error.jsp</result>
</action>

至此简单的文件读写已经完毕!

由于水平有限,还望指教。

struts2中的文件上传和下载的更多相关文章

  1. 4.struts2中的文件上传,下载

    Struts2中文件的上传下载,是借用commons里面的包实现文件的上传,需要导入两个jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 实现 ...

  2. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

  3. javaWeb中,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. JavaWeb中的文件上传和下载功能的实现

    导入相关支持jar包:commons-fileupload.jar,commons-io.jar 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上 ...

  5. struts2中的文件上传,文件下载

    文件上传: Servlet中的文件上传回顾 前台页面 1.提交方式post 2.表单类型 multipart/form-data 3.input type=file 表单输入项 后台 apache提交 ...

  6. Struts2学习总结——文件上传与下载

    Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...

  7. Java中的文件上传和下载

    文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文 ...

  8. python web中的文件上传与下载

    django 框架下 实现服务端的文件上传与下载: import jsonimport osimport uuid def attachment_upload(request): "&quo ...

  9. struts2中的文件上传和文件下载

    单文件文件上传 1.

随机推荐

  1. Node.js学习笔记(七) --- Node.js的静态文件托管、路 由、EJS 模板引擎、GET 、POST

    1 . Nodejs 静态文件托管静态 web 服务器封装 2 . 路由 官方解释:  路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET.POST 等)组成的, ...

  2. js遇到的问题

    一些开发前台时遇到的小问题: ----------------------------------------- 一眼看出页面使用html还是html5: html有三种声明方式:<!DOCTY ...

  3. 中小型研发团队架构实践七:集中式日志ELK

    一.集中式日志 日志可分为系统日志.应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操作人员使用.我们这里主要讲解应用日志,通过应用日志来了解应用的信息和状态,以及 ...

  4. java设计模式-----16、解释器模式

    概念: Interpreter模式也叫解释器模式,是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法.简单地说,Interpreter模式是 ...

  5. hashlib模块 md5 sha1

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...

  6. css画一个提示框

    用css画一个如下图的提示框: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  7. nodejs做的一个测试端口程序

    最近在学习nodejs的http,然后做了一个测试域名有没有使用那些端口,原意是用来做一个本地的静态服务器,然后运行前先测试端口,首先要用到的是net模块,主要用到的是Socket,判断其连接状态即可 ...

  8. JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量

    JS全局变量VAR和THIS 2011-05-23 21:43 很多人都觉得在JavaScript声明一个变量,加var和不加var没有什么区别,实际上是一个错误的观点,如果在函数外面,也就是说在wi ...

  9. iTem2 保持连接,解决ssh的"Write failed: Broken pipe"问题

    方法一: profiles -> sessions -> When idel, send ASCII code 问题场景 服务器环境:阿里云 Linux CentOS 主机 客户端:Mac ...

  10. thinkPHP的几个系统常量

    echo "当前请求:" . __SELF__ . '<br>'; echo "当前分组:" . __MODULE__ . '<br>' ...