zoukankan      html  css  js  c++  java
  • struts2中的文件上传和下载

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

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

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

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

    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>


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

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



  • 相关阅读:
    中文句子相似度之計算與應用
    《The Elder Scrolls V: Skyrim》百般冷门却强力职业
    《老滚5 》买房、娶老婆详尽攻略
    关于组播239.255.255.250
    Windows事件ID大全
    事件查看器常见ID代码解释
    Windows路由表详解
    两种动态加载JavaScript文件的方法
    80后的你们还记得这些游戏吗
    谷歌和HTTPS
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10550379.html
Copyright © 2011-2022 走看看