`
1000
  • 浏览: 27615 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2上传

阅读更多

Struts2本身没有提供解析上传文件内容的功能,它使用第三方的文件上传组件提供对文件上传的支持。Struts2默认使用的上传组件是Apache组织的commons-fileupload组件,该组件性能优异,而且支持任意大小文件的上传。Struts2还支持两种文件上传组件:pell和cos,你可以通过配置struts.multipart.parser属性来切换Struts2使用的上传组件。不过还是使用commons-fileupload组件,因为它是最好的。

commons-fileupload组件的下载网址是:http://commons.apache.org/fileupload/

这里还要依赖于Apache的另外一个项目:commons-io,它下载的网址是http://commons.apache.org/io/

struts2提供了一个文件上传拦截器:org.apache.struts2.interceptor.FileUploadInterceptor,它负责调用底层的文件上传组件解析文件内容。并为Action准备上传文件相关属性值。

例如表单中<input type="file" name="file">,Action对应的字段属性就是

java.io.File 类型,已上传文件的File对象。

fileFileName,上传文件的文件名。

fileContentType,上传文件的内容类型。

这三个属性的值会由FileUploadInterceptor拦截器为你准备好。

 

下面是代码:

upload.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head><title>upload page</title></head>
  <body>
  	<s:actionerror/>
    <s:form action="upload" method="post" enctype="multipart/form-data">
    	<s:file name="file" label="选择上传的文件"/>
    	<s:textfield name="description" label="文件描述"/>
    	<s:submit value="上传"/>
    </s:form>
  </body>
</html>

 

 

FileUploadAction.java

package org.struts2.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport
{
  private static final long serialVersionUID = 1L;

  //代表上传文件的file对象
  private File file;
  //上传文件名
  private String fileFileName;
  //上传文件的MIME类型
  private String fileContentType;
  //上传文件的描述信息
  private String description;
  
  //保存上传文件的目录,相对于Web应用程序的根路径,在struts.xml文件中配置
  private String uploadDir;

  public void setUploadDir(String uploadDir)
  {
    this.uploadDir = uploadDir;
  }

  public String getDescription()
  {
    return description;
  }

  public void setDescription(String description)
  {
    this.description = description;
  }

  public File getFile()
  {
    return file;
  }

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

  public String getFileContentType()
  {
    return fileContentType;
  }

  public void setFileContentType(String fileContentType)
  {
    this.fileContentType = fileContentType;
  }

  public String getFileFileName()
  {
    return fileFileName;
  }

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

  /**
   * @see com.opensymphony.xwork.Action#execute()
   */
  public String execute() throws Exception
  {
    String newFileName = null;
    
    //得到当前时间自1970年1月1日0时0分0秒开始流逝的毫秒数,将这个毫秒数作为上传文件新的文件名。
    long now = new Date().getTime();
    
    //得到保存上传文件的目录的真实路径
    String path = ServletActionContext.getServletContext().getRealPath(uploadDir);
    
    File dir = new File(path);
    //如果这个目录不存在,则创建它。
    if(!dir.exists())
      dir.mkdir();
    
    int index = fileFileName.lastIndexOf('.');
    //判断上传文件名是否有扩展名
    if (index != -1)
      newFileName = now + fileFileName.substring(index);
    else
      newFileName = Long.toString(now) ;

    BufferedOutputStream bos = null;
    BufferedInputStream bis = null;
    //读取保存在临时目录下的上传文件,写入到新的文件中。
    try
    {
      FileInputStream fis = new FileInputStream(file);
      bis = new BufferedInputStream(fis);

      FileOutputStream fos = new FileOutputStream(new File(dir,newFileName));
      bos = new BufferedOutputStream(fos);

      byte[] buf = new byte[4096];

      int len = -1;
      while ((len = bis.read(buf)) != -1)
      {
        bos.write(buf, 0, len);
      }
    }
    finally
    {
      try
      {
        if (null != bis)
          bis.close();
      }
      catch (IOException e)
      {
        e.printStackTrace();
      }

      try
      {
        if (null != bos)
          bos.close();
      }
      catch (IOException e)
      {
        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="GBK" />
	<constant name="struts.custom.i18n.resources"
		value="ApplicationResources" />
	<constant name="struts.multipart.saveDirg" value="d:\\temp" />

	<constant name="struts.multipart.maxSize" value="1024000" />
	
	<package name="default" extends="struts-default">
		
		<action name="upload"
			class="org.struts2.action.FileUploadAction">
			<interceptor-ref name="defaultStack">
				<param name="fileUpload.maximumSize">102400</param>
				<param name="fileUpload.allowedTypes">
					image/gif,image/jpeg
				</param>
			</interceptor-ref>

			<result name="input">/upload.jsp</result>
			<result name="success">/success.jsp</result>
			<param name="uploadDir">/WEB-INF/UploadFiles</param>
		</action>

	</package>
</struts>

  

ApplicationResources.properties

struts.messages.error.uploading=\u6587\u4ef6\u4e0a\u4f20\u9519\u8bef
struts.messages.error.file.too.large=\u4e0a\u4f20\u7684\u6587\u4ef6\u8d85\u8fc7\u4e86\u9650\u5236\u7684\u957f\u5ea6
struts.messages.error.content.type.not.allowed=\u4e0d\u5141\u8bb8\u4e0a\u4f20\u8fd9\u79cd\u7c7b\u578b\u7684\u6587\u4ef6

 

success.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

上传成功:<p/>

文件名: <s:property value="fileFileName"/><br/>
文件类型:<s:property value="fileContentType"/><br/>
文件描述:<s:property value="description"/>

 

 

分享到:
评论

相关推荐

    struts2上传文件源代码

    在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...

    struts2上传下载项目

    在"struts2上传下载项目"中,我们可以深入理解如何利用Struts2实现文件的上传与下载功能。 首先,上传功能在Web应用中十分常见,比如用户在注册时上传头像,或者提交文档等。在Struts2中,我们主要借助`struts2-...

    struts2上传和下载文件详细源码

    在这个"struts2上传和下载文件详细源码"中,我们可以深入理解Struts2如何处理文件上传和下载操作。 1. 文件上传: 在Struts2中,文件上传主要依赖于Apache的Commons FileUpload库。首先,需要在struts.xml配置文件...

    Uploadify结合Struts2上传demo

    本教程将围绕"Uploadify结合Struts2上传demo"这一主题,详细介绍如何在Struts2框架下集成Uploadify实现文件上传功能。 首先,我们需要在项目中引入Uploadify的相关资源。这通常包括JavaScript库(uploadify.js)和...

    struts2上传插件(中文编码冲突解决)

    解决Struts2上传时候使用UTF-8的冲突问题: * 重新包装了JakartaMultiPartRequest提供Chartset的设置方法。 * 可以通过配置方式对MultiPartRequest中的内容进行编码设定,请在Struts.xml中配置添加struts.multipart...

    struts2上传图片到Oracle

    在"struts2上传图片到Oracle"这个场景中,我们将探讨如何使用Struts2框架实现文件上传,以及如何将这些上传的图片存储到Oracle数据库中。 首先,让我们了解文件上传的基本流程。在Struts2中,我们通常会创建一个...

    struts2 文件上传

    struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload

    struts2 上传图片显示

    在本场景中,我们关注的是如何使用Struts2来实现图片上传并显示的功能,同时生成缩略图。 首先,我们需要在Struts2配置文件(通常为struts.xml)中定义一个Action类,该类负责处理图片上传请求。这个Action类应该有...

    struts2上传文件及拦截器

    struts2上传单个文件及多个文件,strus2拦截器的使用,里面有个user用户,先执行user.jsp即登陆,可以执行上传文件的操作,反之,不能,有个exit.jsp,退出之后不能执行。里面含有jar文件,导入myeclipse可以执行...

    struts2上传图片

    在"struts2上传图片"这个场景下,我们将深入探讨如何在Struts2框架下实现用户上传图片的功能,并关注网站统计访问量以及防止重复提交的问题。 首先,上传图片是Web应用中常见的功能,它涉及到前端表单设计、后端...

    struts2 上传文件及打包下载zip

    在这个"struts2 上传文件及打包下载zip"的示例中,我们将探讨如何利用Struts2实现文件上传和下载功能。 首先,文件上传是Web应用程序中的常见需求。在Struts2中,我们可以使用`Struts2`提供的`CommonsFileUpload`...

    struts2上传文件进度条显示

    Struts2作为一款流行的Java Web框架,提供了丰富的功能来处理用户请求,包括文件上传。在Struts2中实现文件上传并展示进度条是一项常见的需求,它能提升用户体验,尤其是在处理大文件时。以下将详细解释如何在Struts...

    Jquery+struts2上传图片,制作进度条,以及Jquery+Json+Struts交互等示例

    Jquery+struts2上传图片,制作进度条等示例,还有Jquery+Json+Struts实现Ajax技术,还有图形处理技术等,虽然很少,但都有重点突出,由于我也是学习,所以代码不是很简洁,对想学习交流的朋友非常合适

    Struts2上传图片存数据库

    在本案例中,我们探讨的是如何利用Struts2框架处理文件上传,并将上传的图片以BLOB(Binary Large Object)类型存储在数据库中,同时提供下载功能。Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,...

    ckeditor+struts2上传图片

    2. **创建Struts2 Action**:在Struts2项目中创建一个Action类,比如`ImageUploadAction`,并定义一个方法来处理上传请求。这个方法需要接收`File`或`CommonsFileUpload`的`FileItem`对象,以接收上传的图片文件。 ...

    xheditor集成struts2上传图片

    本案例涉及的是将xheditor富文本编辑器与Struts2框架整合,实现图片上传功能。xheditor是一款强大的JavaScript在线编辑器,提供了丰富的文本编辑功能,而Struts2是一个流行的Java Web框架,用于构建MVC(模型-视图-...

    struts2上传必备jar包,避免出现struts2的升级漏洞!自己吃亏后分享

    这个bug是由Struts2上传文件后return SUCCESS后报的错误: java.lang.AbstractMethodError: be.telio.mediastore.ui.upload.GarryMultiPartRequest.cleanUp()V at org.apache.struts2.dispatcher.multipart....

    Struts2项目struts2 上传 下载 项目

    在这个“Struts2 上传下载项目”中,我们将深入探讨如何利用Struts2实现文件上传与下载功能,并结合MySQL数据库、DAO(数据访问对象)层以及MVC架构来构建一个完整的应用。 1. **Struts2框架基础** Struts2的核心...

    struts2上传分析

    Struts2作为一款流行的Java Web框架,其在处理文件上传方面提供了多种方法,使得开发者能够灵活地实现用户数据的上传功能。以下是对Struts2上传功能的详细分析: 1. **Struts2的上传方式** - **使用Struts2核心...

    struts2 上传文件超过最大值解决办法

    在Struts2框架中,处理文件上传是一项常见且重要的功能,尤其当涉及到大文件上传时,往往会遇到上传文件大小超过预设限制的问题。这不仅影响用户体验,还可能导致应用程序出现异常或错误。本文将深入探讨如何解决...

Global site tag (gtag.js) - Google Analytics