浅谈Struts2多文件上传思路以及实现

开发 后端
Struts2多文件上传,比较简单的思想是,在Action中,通过依赖注入获取上传文件的相关属性,再用 文件输入流和文件输出流来把文件存在服务器相关路径中。当然,由于是多文件上传,文件的相关属性是用数组或List来定义的。下面我给个用数组做多文件上传的例子。

(1)Struts2文件上传首先是视图层,用JSP。

页面文件为:

 upload.jsp

< %@ page contentType="text/html;charset=gb2312" %>
< A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%>
< HTML xhtml? 1999 www.w3.org http: xmlns="< A href=">http://www.w3.org/1999/xhtml< /A>">
< HEAD>




< ?xml:namespace prefix = s />< s:fielderror>< /s:fielderror>


< FORM encType=multipart/form-data method=post action=upload.action>
文件标题< INPUT name=title>

        第一个上传文件:< INPUT type=file name=upload>

           第二个上传文件:< INPUT type=file name=upload>

           第三个上传文件:< I name="upload" type="file" NPUT>

< INPUT value=上传 type=submit>
< /FORM>

(2)控制器Action

package com.wing.study.upload;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
public class UploadAction extends ActionSupport
{
   private String title;
   private File[] upload;
   private String[] uploadContentType;
   private String[] uploadFileName;
   private String savePath;
   public void setSavePath(String value)
   {
    this.savePath=value;
   }
   public String getSavePath()
   {
    return ServletActionContext.getRequest().getRealPath(savePath);
   }
   public void setUpload(File[] upload)
   {
    this.upload=upload;
   }
   public File[] getUpload()
   {
    return upload;
   }
   public void setTitle(String title)
   {
    this.title=title;
   }
   public String getTitle()
   {
    return title;
   }
   public void setUploadContentType(String[] uploadContentType)
   {
    this.uploadContentType=uploadContentType;
   }
   public String[] getUploadContentType()
   {
    return (this.uploadContentType);
   }
   public void setUploadFileName(String[] uploadFileName)
   {
    this.uploadFileName=uploadFileName;
   }
   public String[] getUploadFileName()
   {
    return (this.uploadFileName);
   }
   public String execute() throws Exception
{
    for(int i=0;i    {
   FileOutputStream fos = new FileOutputStream(getSavePath()

+ "\\" + getUploadFileName()[i]);
   FileInputStream fis = new FileInputStream(getUpload()[i]);
   byte[] buffer = new byte[1024];
   int len = 0;
   while ((len = fis.read(buffer)) > 0)
   {
    fos.write(buffer , 0 , len);
   }
    }
       return SUCCESS;
}
}

 

(3)struts.xml配置文件

这里需要控制文件类型和大小。也就是上传文件过滤。

我在这里不采用手动过滤,因为手动过滤要书写大量过滤代码,开发复杂。

所以这里用上传文件拦截器来控制。

< ?xml version="1.0" encoding="UTF-8"?>

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "< A href="http://struts.apache.org/dtds/struts-2.0.dtd">

http://struts.apache.org/dtds/struts-2.0.dtd">

< STRUTS>
    < CONSTANT value="globalMessages" name="struts.custom.i18n.resources" />
< CONSTANT value="GBK" name="struts.i18n.encoding" />

< PACKAGE name="com" extends="struts-default">

   < ACTION class=com.wing.study.upload.UploadAction name="upload">
   < INTERCEPTOR-REF name="fileUpload">
    < PARAM name="allowedTypes">image/bmp,image/jpeg,image/gif,image/png< /PARAM>
    < PARAM name="maximumSize">202400< /PARAM>
    < /INTERCEPTOR-REF>
    < INTERCEPTOR-REF name="defaultStack" />
            < PARAM name="savePath">/upload< /PARAM>
            < RESULT name="input">/upload.jsp< /RESULT>       
    < RESULT>/succ.jsp< /RESULT>
   < /ACTION> 
< /PACKAGE>
< /STRUTS>

注意 使用了上传文件拦截器,必须显示的调用默认拦截器栈:defaultStack.

allowedTypes和maximumSize分别过滤文件的类型和大小。

当上传文件不符合定义的要求时,会转向逻辑视图input,然后根据映射转向物理视图upload.jsp

然后根据Struts2标签s:fielderror输出错误信息。当然这里的错误信息你可能不知道是什么。不过可以在国际化资源中将错误信息用中文替代。

当上传文件符合定义的要求时,会转向succ.jsp

这里给出succ.jsp代码。

< %@ page language="java" contentType="text/html; charset=GBK"%>
<< A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%>
< HTML>
   
       
   
   
        上传成功!

   文件标题:< ?xml:namespace prefix = s />< s:property value=" + title">< /s:property>

                    第一个文件为:"/>

                     第二个文件为:"/>

                     第三个文件为:"/>

   

上传成功后,会依次显示你上传的图片。通过s:property标签来获取图片地址。


由上面可以看出,通过Struts2来实现文件的上传甚至是多文件上传,并不难。

 

PS:我做的手机带BOSS射击类游戏,目前已经制作了240*320和128*160分辨率的。没办法,开发模拟器很少能找到128*160分辨率的,所以我先做的240*320的 然后给朋友测试。但是我的手机又是128*160分辨率的,不能在自己手机上用还是很不乐意的。。所以又用手机测试开发的128*160分辨率。

另外关于RPG游戏的战斗系统和人物菜单系统基本完成。等我把对话系统弄好,就开始开发RPG游戏。

不久前用Swing做了一个类QQ聊天工具的客户端和服务器端。在同学那里测试可以聊天。但是还是未完成版的。

还做了个简单的虚拟桌面,也是Swing做的,集成了我开发的一些小软件在里面。


有人可能会觉得奇怪,为什么我会花时间做JAVA桌面应用。

我只是不想像某些JAVA程序员一样,听说JAVA桌面不行,便不去学习。这也是我对中国程序员感到的一丝悲哀。你说JAVA不能开发游戏,但是偏偏国外就有那么多JAVA 3D的网络游戏,并且在运营中。

每当我听见他们说不用学这个不用学那个,就有点愤怒。也许正像大家说的,没有最好的计算机语言,只有最好的程序员。即使是这样,我想,优秀的程序员,在中国,可能绝无仅有了。

下面是截图:

桌面图标可以随意拖动,第一次使用的时候,会创建一个文件夹根目录,用来保存一些信息。这只是非常简单的一个东西。因为我还要花时间做Struts2,Java ME和Java FX.

截图创建根目录截图""

【编辑推荐】

  1. 在Eclipse中开发struts应用程序
  2. 手把手教你在Eclipse中配置开发Struts
  3. Eclipse下开发struts完整解决乱码问题
  4. Struts相关背景介绍
  5. 使用Easy Struts for Eclipse开发Struts
责任编辑:张燕妮 来源: 百度空间
相关推荐

2009-06-04 09:41:50

struts2上传文件

2009-06-04 08:45:01

Struts2下载

2009-06-25 15:50:03

Struts2教程上传任意多个文件

2009-02-04 14:00:59

2009-06-04 08:01:25

Struts2拦截器原理

2009-06-08 16:44:00

2009-06-05 09:58:20

struts2验证用户注册

2009-06-04 08:34:24

Struts2配置struts.xml

2009-06-03 15:57:29

Struts1.2动态多文件

2009-07-29 09:54:34

struts2和str

2012-04-25 10:14:40

JavaStruts

2011-04-28 09:52:04

Struts2

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-06-05 10:52:45

struts2深入详解配置文件

2009-02-04 10:51:07

2011-05-05 10:16:06

struts2

2011-06-28 09:14:23

Struts 2WebWork

2017-04-20 13:30:00

AndroidRetrofit 2文件上传

2009-06-26 13:46:13

Struts

2009-07-03 09:35:57

Struts2 JSP
点赞
收藏

51CTO技术栈公众号