zoukankan      html  css  js  c++  java
  • strut2 文件上传完整案例

    之前写的文章都是关键的代码,今天整理好一个完整案例,粘贴可运行。

    上传界面:upload.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'upload.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
       <center>
       <form action="upload.action" method="post" enctype="multipart/form-data">
               文件:<input type="file" name="upload"/>
           <input type="submit" value="上传"/>
       </form>
    
       </center>
      </body>
    </html>

    action中的代码:FileUploadAction.java

    package cn.itcast.action;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUploadAction extends ActionSupport{
        
        private String savefile;//通过注入得到上传的路径
        private File upload;
        private String uploadFileName;
        
            
        public File getUpload() {
            return upload;
        }
    
        public void setUpload(File upload) {
            this.upload = upload;
        }
    
        public String getUploadFileName() {
            return uploadFileName;
        }
    
        public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        public String getSavefile() {
            return savefile;
        }
    
        public void setSavefile(String savefile) {
            this.savefile = savefile;
        }
    
        //文件拷贝函数
        //src表示源文件,dst表示目标文件
        public static void copy(File src,File dst) throws Exception{
            //定义一个输入流对象,使用缓冲类需要提供一个输入流对象
            InputStream in  = new BufferedInputStream(new FileInputStream(src));
            OutputStream out = new BufferedOutputStream(new FileOutputStream(dst));
            //声明一个字节数组,用来存储读入的数据
            byte[] b = new byte[1024];
            int length=0;
            //循环读取输入流对象,把输入流读到字节数组中,返回读取的字节数长度,如果读到末尾则返回-1
            while(-1!=(length=in.read(b))){
                out.write(b);//讲字节数组的数据写到输出流文件中.
            }
            in.close();  //如果不关闭的话上传的文件将无法正常打开!!
            out.close();
        }
        
        public String execute(){
            String path = ServletActionContext.getServletContext().getRealPath(getSavefile()+"/");
            File parfiFile = new File(path);//目录路径
            if(!parfiFile.exists()){
                parfiFile.mkdir();
            }
            File file = new File(parfiFile, getUploadFileName());//通过父文件+文件名得到一个实际的文件
            if(file.getParent()!=null){
                try {
                    copy(upload, file);//调用文件拷贝的方法
                    System.out.println("上传成功");
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    System.out.println("上传失败");
                    e.printStackTrace();
                }
            }
            return "success";
        }
        
    
    }

    struts.xml的配置:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
        
        <constant name="struts.i18n.encoding" value="utf-8"></constant>
        <constant name="struts.multipart.saveDir" value="F:"></constant>
        <constant name="struts.multipart.maxSize" value="10240000" />
        <package name="base" extends="struts-default">
               <global-results>
                <result name="message">/WEB-INF/page/message.jsp</result>
            </global-results>
        </package> 
        
        <package name="itcast"  extends="base" >    
            <action name="upload" class="cn.itcast.action.FileUploadAction">
                <interceptor-ref name ="fileUpload">   
                <param name ="allowedTypes" >   
                    image/bmp,image/png,image/gif,image/jpeg,
                    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
                    application/vnd.ms-excel,
                    application/msword
                 </param >   
                 <param name="maximumSize">10240000</param>  
             </interceptor-ref>   
             <interceptor-ref name ="defaultStack" /> 
                <param name="savefile">/uploadfile</param><!--注入上传的路径-->
                <result name="success">/index.jsp</result>
            </action>
        </package>
    </struts>
  • 相关阅读:
    [Leetcode] Set Matrix Zeroes
    [Leetcode] Longest Valid Parentheses
    [Leetcode] Interleaving String
    [Leetcode] Surrounded Regions
    [Leetcode] Candy
    用Delphi获取当前系统时间
    Delphi窗体中禁用最大化按钮
    DELPHI关于文件的操作
    Delphi 2010初体验,是时候抛弃Delphi 7了
    双通道内存有什么优点和缺点?
  • 原文地址:https://www.cnblogs.com/kailing-con/p/4208901.html
Copyright © 2011-2022 走看看