zoukankan      html  css  js  c++  java
  • 单文件上传、多文件上传和文件下载

    单文件上传:

    index页面:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>文件上传</title>
      </head>
      <body>
      <!-- 上传页面的准备 -->
      <s:form action="upload.action" enctype="multipart/form-data" method="post">
          <s:textfield name ="title" label ="标题"/><br/>
          <s:file name ="upload" label="选择文件"/><br/>
          <s:submit name ="submit" value ="上传文件"/>
      </s:form> 
      </body>
    </html>

    struts.xml配置相应的action:

    <!--  单文件上传-->
        <action name="upload" class="action.UploadAction">
            <param name="savePath">/image</param>
            <result name="success">/upload_success.jsp</result>
        </action>

    对应的UploadAction类:

    public class UploadAction extends ActionSupport{
        //封装上传文件的属性
        private File upload;
        //封装上传文件的类型
        private String uploadContentType;
        //封装上传文件的名称
        private String uploadFileName;
        public File getUpload() {
            return upload;
        }
        public void setUpload(File upload) {
            this.upload = upload;
        }
        public String getUploadContentType() {
            return uploadContentType;
        }
        public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
        public String getUploadFileName() {
            return uploadFileName;
        }
        public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
        public void setSavePath(String savePath) {
            this.savePath = savePath;
        }
        //获取文件上传的路径
        private String savePath;
        
        @Override
        public String execute() throws Exception {
                //创建缓存数组
                byte [] buffer =new byte[1024];
                //读取文件
                    FileInputStream fis =new FileInputStream(getUpload());
                    //保存文件,并设置保存目录的路径
                    FileOutputStream fos =new FileOutputStream(getSavePath()+"\"+this.getUploadFileName());
                    int length =fis.read(buffer);
                    while(length>0){
                        //每次写入length长度的内容
                        fos.write(buffer,0,length);
                        length=fis.read(buffer);
                    }
                    fis.close();
                    fos.flush();
                    fos.close();
            return SUCCESS;
        }
        public String getSavePath(){
            return ServletActionContext.getServletContext().getRealPath(savePath);
        }
    }

    多文件上传:

    和单文件上传差不多只需要在index页面多添加几个文件上传的标签:

    index页面:

    <body>
      <!-- 上传页面的准备 -->
      <s:form action="uploads.action" enctype="multipart/form-data" method="post">
          <s:textfield name ="title" label ="标题"/><br/>
          <s:file name ="uploads" label="选择文件"/><br/>
          <s:file name ="uploads" label="选择文件"/><br/>
          <s:file name ="uploads" label="选择文件"/><br/>
          <s:submit name ="submit" value ="上传文件"/>
      </s:form> 
      </body>

    struts.xml配置相应的action:

    <!-- 多文件上传 -->
        <action name ="uploads" class="action.UploadsAction">
            <!--通过param参数设置保存目录的路径 -->
            <param name="savePath">/image</param>
            <result name="success">/upload_success.jsp</result>
        </action>

    对应的UploadsAction类:

    public class UploadsAction extends ActionSupport{
        //封装上传文件的属性
        private File[] uploads;
        //封装上传文件的类型
        private String[] uploadContentType;
        //封装上传文件的名称
        private String[] uploadFileName;
        
        
        
        public File[] getUploads() {
            return uploads;
        }
        public void setUploads(File[] uploads) {
            this.uploads = uploads;
        }
        public String[] getUploadContentType() {
            return uploadContentType;
        }
        public void setUploadContentType(String[] uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
        public String[] getUploadFileName() {
            return uploadFileName;
        }
        public void setUploadFileName(String[] uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
        //获取文件上传的路径
        private String savePath;
        
        @Override
        public String execute() throws Exception {
                //创建缓存数组
                byte [] buffer =new byte[1024];
                //读取文件
                for (int i = 0; i < uploads.length; i++) {
                    FileInputStream fis =new FileInputStream(getUploads()[i]);
                    //保存文件,并设置保存目录的路径
                    FileOutputStream fos =new FileOutputStream(getSavePath()+"\"+this.getUploadFileName()[i]);
                    int length =fis.read(buffer);
                    while(length>0){
                        //每次写入length长度的内容
                        fos.write(buffer,0,length);
                        length=fis.read(buffer);
                    }
                    fis.close();
                    fos.flush();
                    fos.close();
                }
                    
            return SUCCESS;
        }
        public String getSavePath(){
            return ServletActionContext.getServletContext().getRealPath(savePath);
        }
    }

    文件下载:

    index页面:

    <body>
        <a href="download.action?fileName=16.1.txt">点击此处下载文档</a>  
      </body>

    struts.xml配置相应的action:

    <action name="download" class="action.FileDownAction">
        <!--下载文件的路径  -->
        <param name="inputPath">/image</param>
        <result name="success" type="stream">
        <!--指定内容类型,下载的文件,可执行文件  -->
            <param name="contentType">application/octet-stream</param>
            <param name="inputName">inputStream</param>
            <param name="contentDisposition">
                attachment;filename="${fileName}"
            </param>
            <!--读取和下载文件时缓存区大小  -->
            <param name="bufferSize">4096</param>
        </result>
        </action>

    对应的UploadsAction类:

    public class FileDownAction extends ActionSupport {
        //读取下载文件的目录   
        private String inputPath;
        //下载文件的文件名
        private String fileName;
        //读取下载文件的输入流
        private InputStream inputStream;
        //下载文件的类型
        private String contentType;
        public String getInputPath() {
            return inputPath;
        }
        public void setInputPath(String inputPath) {
            this.inputPath = inputPath;
        }
        public String getFileName() {
            return fileName;
        }
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
        //文件下载的核心,获取输入流
        public InputStream getInputStream() throws Exception {
            //获取真实的路径
            String path =ServletActionContext.getServletContext().getRealPath(inputPath);
            return new BufferedInputStream(new FileInputStream(path+"\"+fileName));
        }
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        public String getContentType() {
            return contentType;
        }
        public void setContentType(String contentType) {
            this.contentType = contentType;
        }
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
        
        
    }
  • 相关阅读:
    字符,字节和编码
    Linux网络参数和ifconfig
    默认网关 网关 子网掩码 广播地址
    S.M.A.R.T.记录几块ssd硬盘
    linux 别名
    echo 输出颜色
    Linux:echo命令详解
    centos下安装mongodb 通过shell脚本
    linux查看登录用户
    linux wget指定下载目录和重命名
  • 原文地址:https://www.cnblogs.com/qingzhi/p/5945881.html
Copyright © 2011-2022 走看看