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>
时间: 2024-12-30 10:08:53

strut2 文件上传完整案例的相关文章

PHP实现视频文件上传完整实例

PHP实现视频文件上传完整实例 转载 这篇文章主要介绍了PHP实现视频文件上传的技巧,包含了PHP配置信息的设计及大文件的处理,需要的朋友可以参考下 本文以一个完整实例的形式实现了视频文件上传的功能.虽然是比较基础的应用,仍有一定的参考价值.分享给大家供大家参考之用.具体方法如下: 首先,对PHP来说视频也属于文件,我们利用这个道理,可以通过与上传普通文件类似的方式实现上传PHP视频文件.不同的是视频文件一般较大,上传时间长,而php配置文件也对上传文件的大小有限制.如果需要更好地用PHP实现文

struts2+extjs文件上传完整实现(解决了上传中的各种问题)

首先需要引入上传控件 <script type="text/javascript" src="<%=basePath%>/js/ext/examples/ux/fileuploadfield/FileUploadField.js" charset="utf-8"></script> 弹出上传框对应extjs代码 var uploadForm=new Ext.FormPanel({ id:'uploadForm'

Struts2 + uploadify 多文件上传完整实例!

首先我这里使用的是  Jquery  Uploadify3.2的版本  导入相关的CSS  JS    <link rel="stylesheet" type="text/css" href="<%=basePath%>css/uploadify/uploadify.css"> <script src="<%=basePath%>js/jquery.min.js"></sc

strut2 文件上传

原理:将一个文件复制到另一文件中. 这里给出action的代码,其它页面省略: 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.FileO

Struts 框架 之 文件上传下载案例

Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:   jar包的具体作用在前面的文章有讲. 配置 web.xml <!-- Struts核心拦截器 --> <filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepare

Struts2 + uploadify 多文件上传完整的例子!

首先,我这里使用的是  Jquery  Uploadify3.2版本号  导入相关的CSS  JS    <link rel="stylesheet" type="text/css" href="<%=basePath%>css/uploadify/uploadify.css"> <script src="<%=basePath%>js/jquery.min.js"></s

网站用户头像剪裁上传完整案例

做为网站前段开发人员来说,用户头像剪裁和上传是一个很常用的功能,一般这个功能涉及到图片的放大,缩小,移动,旋转,和剪裁.下面我们来做一个完整的demo,剪裁后的图片以base64的形式返回,base64怎么上传到后台服务器,很简单,这里不做介绍. 图片的操作:手机端操作和其他手机图片应用操作没有任何区别. PC端:通过鼠标的滚轮是实现图片的放大缩小,长按左键移动鼠标实现图片的移动,双击图片现实图片的旋转. demo下载地址:下载1 下载2 在这个demo中,我们使用Jquery的插件(jquer

Volley源码分析之自定义MultiPartRequest(文件上传)

本篇内容目录: 使用HttpURLConnection上传文件到服务器案例 自定义支持文件上传的MultiPartRequest Web后台接收文件的部分代码 先来看下HttpURLConnection来文件上传的案例: 1.传送数据到服务器,必定是使用POST请求: //设置请求方式为post httpURLConnection.setDoOutput(true); httpURLConnection.setRequestMethod("POST"); 2.上传文件的HTTP请求中的

JavaWeb 文件上传下载

1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下载功能实现的. 文件上传下载实际上是两步操作,第一是文件上传,就是将本地文件上传到服务器端,实现文件多用户之间的共享,第二是文件下载,就是将服务器端的文件下载到本地磁盘. 1.2. 文件上传下载实现原理 首先,需要知道文件是如何实现上传及下载的.文件上传及下载实现原理如下: 文件上传实现流程如下: