随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0

导航

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

公告

关注我的新浪微博

我的著作









常用链接

留言簿(126)

我参与的团队

随笔分类(818)

随笔档案(310)

文章分类(1)

文章档案(8)

相册

ADSL、3G查询

CSDN

eclipse

ibm

Java EE

Linux

Web

云服务

代理网站

关注的网站

协议

喜欢的Blog

国内广告平台

图书出版

在线培训

开发工具

微博客户端

手机铃声

操作系统

  • ReactOS
  • 一个与windowXP/2003兼容的操作系统

数学

文件格式

源码资源

移动(Mobile)

编程语言

英语学习

最新随笔

搜索

  •  

积分与排名

  • 积分 - 1969793
  • 排名 - 6

最新评论

阅读排行榜

评论排行榜

Struts2教程7:上传任意多个文件

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法


一、上传单个文件

    上传文件是很多Web程序都具有的功能。在Struts1.x中已经提供了用于上传文件的组件。而在Struts2中提供了一个更为容易操作的上传文件组件。所不同的是,Struts1.x的上传组件需要一个ActionForm来传递文件,而Struts2的上传组件是一个拦截器(这个拦截器不用配置,是自动装载的)。在本文中先介绍一下如何用struts2上传单个文件,最后介绍一下用struts2上传任意多个文件。

    要用Struts2实现上传单个文件的功能非常容易实现,只要使用普通的Action即可。但为了获得一些上传文件的信息,如上传文件名、上传文件类型以及上传文件的Stream对象,就需要按着一定规则来为Action类增加一些gettersetter方法。

    Struts2中,用于获得和设置java.io.File对象(Struts2将文件上传到临时路径,并使用java.io.File打开这个临时文件)的方法是getUploadsetUpload。获得和设置文件名的方法是getUploadFileNamesetUploadFileName,获得和设置上传文件内容类型的方法是getUploadContentTypesetUploadContentType。下面是用于上传的动作类的完整代码:


package action;

import java.io.*;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport 
{
    
private File upload;
    
private String uploadFileName;
    
private String uploadContentType;
    
    
public String getUploadFileName()
    {
        
return uploadFileName;
    }

    
public void setUploadFileName(String fileName)
    {
        
this.uploadFileName = fileName;
    }

    
public File getUpload()
    {
        
return upload;
    }

    
public void setUpload(File upload)
    {
        
this.upload = upload;
    }
    
public void setUploadContentType(String contentType)
    {
        
this.uploadContentType=contentType;
    
    }
    
    
public String getUploadContentType()
    {
        
return this.uploadContentType;
    }
    
public String execute() throws Exception
    {   
        java.io.InputStream is 
= new java.io.FileInputStream(upload);
        java.io.OutputStream os 
= new java.io.FileOutputStream("d:\\upload\\" + uploadFileName);
        
byte buffer[] = new byte[8192];
        
int count = 0;
        
while((count = is.read(buffer)) > 0)
        {
            os.write(buffer, 
0, count);
        }
        os.close();
        is.close();
        
return SUCCESS;
    }
}

    在execute方法中的实现代码就很简单了,只是从临时文件复制到指定的路径(在这里是d:\upload)中。上传文件的临时目录的默认值是javax.servlet.context.tempdir的值,但可以通过struts.properties(和struts.xml在同一个目录下)的struts.multipart.saveDir属性设置。Struts2上传文件的默认大小限制是2M2097152字节),也可以通过struts.properties文件中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上传文件的总大小不能超过2K字节。

    下面的代码是上传文件的JSP页面代码


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

<html>
    
<head>
        
<title>上传单个文件</title>
    
</head>

    
<body>
        
<s:form action="upload" namespace="/test"
            enctype
="multipart/form-data">
            
<s:file name="upload" label="输入要上传的文件名" />
            
<s:submit value="上传" />
        
</s:form>

    
</body>
</html>

也可以在success.jsp页中通过<s:property>获得文件的属性文件名和文件内容类型),代码如下

    <s:property value="uploadFileName"/>

二、上传任意多个文件

    Struts2中,上传任意多个文件也非常容易实现。首先,要想上传任意多个文件,需要在客户端使用DOM技术生成任意多个<input type=”file” />标签。name属性值都相同。代码如下:

<html>
    
<head>
        
<script language="javascript">

function addComponent()
{
        
var uploadHTML = document.createElement( "<input type='file'  name='upload'/>");
        document.getElementById(
"files").appendChild(uploadHTML);
        uploadHTML 
= document.createElement( "<p/>");
        document.getElementById(
"files").appendChild(uploadHTML);
}
</script>
    
</head>
    
<body>
        
<input type="button" onclick="addComponent();" value="添加文件" />
        
<br />
        
<form onsubmit="return true;" action="/struts2/test/upload.action"
            method
="post" enctype="multipart/form-data">
            
<span id="files"> <input type='file' name='upload' />
                
</>
            
</span>
            
<input type="submit" value="上传" />
        
</form>
    
</body>

</html>
     上面的javascript代码可以生成任意多个<input type=’file’>标签,name的值都为file(要注意的是,上面的javascript代码只适合于IE浏览器,firefox等其他浏览器需要使用他的代码)。至于Action类,和上传单个文件的Action类基本一至,只需要将三个属性的类型改为List即可。代码如下:
package action;

import java.io.*;
import com.opensymphony.xwork2.ActionSupport;

public class UploadMoreAction extends ActionSupport
{
    
private java.util.List<File> uploads;
    
private java.util.List<String> uploadsFileName;
    
private java.util.List<String> uploadsContentType;

    
public java.util.List<String> getUploadsFileName()
    {
        
return uploadFileName;
    }
    
public void setUploadFileName(java.util.List<String> fileNames)
    {
        
this.uploadFileName = fileNames;
    }
    
public java.util.List<File> getUploads()
    {
        
return uploads;
    }

    
public void setUploads(java.util.List<File> uploads)
    {
        
this.uploads = uploads;
    }

    
public void setUploadsContentType(java.util.List<String> contentTypes)
    {
        
this.uploadsContentType = contentTypes;

    }

    
public java.util.List<String> getUploadsContentType()
    {
        
return this.uploadsContentType;
    }

    
public String execute() throws Exception
    {
        
if (uploads != null)
        {
            
int i = 0;
            
for (; i < uploads.size(); i++)
            {
                java.io.InputStream is 
= new java.io.FileInputStream(uploads.get(i));
                java.io.OutputStream os 
= new java.io.FileOutputStream(
                        
"d:\\upload\\" + uploadsFileName.get(i));
                
byte buffer[] = new byte[8192];
                
int count = 0;
                
while ((count = is.read(buffer)) > 0)
                {
                    os.write(buffer, 
0, count);
                }
                os.close();
                is.close();
            }
        }
        
return SUCCESS;
    }
}

    在execute方法中,只是对List对象进行枚举,在循环中的代码和上传单个文件时的代码基本相同。如果读者使用过struts1.x的上传组件,是不是感觉Struts2的上传功能更容易实现呢?Struts1.x中上传多个文件时,可是需要建立带索引的属性的。而在Struts2中,就是这么简单就搞定了。1是上传任意多个文件的界面。



1

    在本文中给出了用Struts2上传任意多个文件的一个方法,如果哪位读者有更好的方法,请跟贴!

下一篇:Struts2教程8:拦截器概述






Android开发完全讲义(第2版)(本书版权已输出到台湾)

http://product.dangdang.com/product.aspx?product_id=22741502



Android高薪之路:Android程序员面试宝典 http://book.360buy.com/10970314.html


新浪微博:http://t.sina.com.cn/androidguy   昵称:李宁_Lining

posted on 2008-04-27 21:47 银河使者 阅读(24681) 评论(40)  编辑  收藏 所属分类: Struts2 原创

评论

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

http://www.tudousee.cn 土豆网电视剧前线 这个网站的上传也是用这个的说.
2008-04-28 10:57 | 王能

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

这个上传我做了好多次,就算一模一样也不能运行正常,请指教一下。
QQ:287112724
2008-05-19 16:04 | muboy

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

出现什么错误,请详细说一下,
2008-05-19 16:13 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

一直报一个http500错误
异常如下
java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:136)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:476)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:486)
com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:517)
com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:515)
org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:697)
org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:330)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:390)
2008-05-19 16:20 | muboy

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

文件名中有中文该怎么处理?
2008-05-20 10:53 | 小哥

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

to muboy
struts2的上传需要一些jar文件,如common-fileupload.jar,不知你加到classpath里没
2008-05-20 11:44 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

如果文件中有中文名,只要服务端能成功获得中文文件名,就可以直接保存,关键是在服务端能否获得中文文件名
2008-05-20 11:46 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

commons-fileupload-1.1.1.jar
commons-io-1.1.jar

我添加了这2个jar文件就可以了,谢谢!
2008-05-20 13:21 | muboy

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

页面用gb2312
传到服务器用8859这些方式我都试了,还是乱码,你哪里有好办法吗?
2008-05-20 13:22 | 小哥

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

to 小哥
我再试一下,
2008-05-20 15:27 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

上传多个文件,为什么只能上传第一个文件呀。。而且三个文件名都成了一个文件名了。
2008-05-22 16:38 | sdlvzg

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

那是因为最后一个文件将前两个文件覆盖了,你需要为每一个文件起不同的名子。
2008-05-22 17:24 | 银河使者

# re: Struts2教程7:上传任意多个文件[未登录]  回复  更多评论   

上传多个文件的 uploads 怎么获得的值.
2008-06-27 15:22 | east

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

文章的代码里有啊,如果是多个文件,将每个文件作为一个java.io.File对象保存在List中,实际上,每一个File对象就是一个已经上传到服务器的临时文件了。

public class UploadMoreAction extends ActionSupport
{
private java.util.List<File> uploads;
...
}
2008-06-27 17:31 | 银河使者

# re: Struts2教程7:上传任意多个文件[未登录]  回复  更多评论   

页面上 <input type='file' name='upload' />
应该是 <input type='file' name='uploads' />


2008-06-30 10:16 | east

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

是upload没错
2008-06-30 10:27 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

谢谢啦,成功了。楼主写得真好。。
2008-11-01 16:40 | daoyongyu

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

怎么缺了这么jar呢?还是什么原因?反正放进去是好使了,呵呵
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
需要的可以给我email
hanjiyuan@gmail.com
2009-02-11 16:33 | 这是一个好教程

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

@这是一个好教程
这两个jar可以到www.apache.org上的commons子项目上下载。这两个文件是必须的。
2009-02-11 16:50 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

请问一下.在Action中uploadFileName和uploadContentType为什么是空的没值.
2009-03-11 13:09 | love_future

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

@love_future
不知你的页同是如何写的 <s:file>标签的name属性值应为upload
2009-03-11 13:55 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

请问一下,成员变量fileName是不是应该是uploadFileName,否则取不到文件名,fileName为null。
2009-04-24 12:25 | lvzhu

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

@lvzhu
2009-04-24 13:07 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

嗯,不错啊
2009-07-31 07:58 | jadmin

# re: Struts2教程7:上传任意多个文件[未登录]  回复  更多评论   

不能上传大一点的文件,报错如下
,这个怎么解决
the request was rejected because its size (2457472) exceeds the configured maximum (2097152)
2009-08-02 22:08 | 星星

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

默认最大是2M
2009-08-02 22:18 | 银河使者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

需要进行设置
2009-08-02 22:19 | 银河使者

# re: Struts2教程7:上传任意多个文件[未登录]  回复  更多评论   

哦,呵呵,谢谢,加里一句struts.multipart.maxSize=1000000000 就可以了,
2009-08-02 22:33 | 星星

# re: Struts2教程7:上传任意多个文件[未登录]  回复  更多评论   

public String uploadFile() throws Exception{
for (int i = 0; i < file.size(); ++i)
{
InputStream is = new FileInputStream(file.get(i));

String root = ServletActionContext.getServletContext().getRealPath("\\upload");

File destFile = new File(root, this.getFileFileName().get(i));

OutputStream os = new FileOutputStream(destFile);

byte[] buffer = new byte[400];

int length = 0;

while ((length = is.read(buffer)) > 0)
{
os.write(buffer, 0, length);
}

is.close();

os.close();
}


return Action.SUCCESS;
}
2009-09-21 11:26 | 猎人

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

晕。不用配置struts2的配置文件吗
2010-01-20 15:28 | 夜来疯

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

The server encountered an internal error () that prevented it from fulfilling this request

你们说的包我也加进去的 但就是不行 。。。。。。
upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<form action="upload.action" method="post">
<input name="upload" type="file">
<input name="submit" type="submit" value="upload">
</form>

UploadAction
package upload;

import java.io.*;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport
{
private File upload;
private String uploadFileName;
private String uploadContentType;

public String getUploadFileName()
{
return uploadFileName;
}

public void setUploadFileName(String fileName)
{
this.uploadFileName = fileName;
}

public File getUpload()
{
return upload;
}

public void setUpload(File upload)
{
this.upload = upload;
}
public void setUploadContentType(String contentType)
{
this.uploadContentType=contentType;

}

public String getUploadContentType()
{
return this.uploadContentType;
}
public String execute() throws Exception
{
java.io.InputStream is = new java.io.FileInputStream(upload);
java.io.OutputStream os = new java.io.FileOutputStream("d:\\upload\\" + uploadFileName);
byte buffer[] = new byte[8192];
int count = 0;
while((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
return "ok";
}
}

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>
<package name="struts2.0" extends="struts-default">
<action name="login" class="com.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/result.jsp</result>
<result name="filter">login.jsp</result>
</action>
<action name="upload" class="upload.UploadAction">
<result name="ok">/ok.jsp</result>
</action>
</package>
</struts>
2010-07-15 11:56 | str

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

<input type='file' name='upload' /> 的话 action 中 if (uploads != null) 进不去啊
2010-08-09 17:35 | waich

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

晕死~~调了N长时间。。。lz的UploadMoreAction 代码其中一段应该如下:
public java.util.List<String> getUploadsFileName()
{
return uploadsFileNames;
}
public void setUploadsFileName(java.util.List<String> fileNames)
{
this.uploadsFileNames = fileNames;
}
最要命的是把setUploadsFileName写成setUploadFileName。。。额的神那最后才发现
2011-02-22 22:21 | kirea

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

页面上到底应该是 <input type='file' name='upload' /> 还是
<input type='file' name='uploads' /> ?我用'upload'时上传多个文件在UploadMoreAction的execute()中uploads=null,所以我改用'uploads',但是上传时又报以下错误,怎么回事???

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
action.UploadMoreAction.execute(UploadMoreAction.java:50)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.

2011-05-06 14:53 | 阿侃

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

struts2 的配置文件怎么写啊, 或 web.xml 中,需要写什么呢?
2011-05-18 23:16 | 爱好者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

@爱好者
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2011-06-29 17:35 | 爱好者

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

老师有个地方你写错了:
<input type='file' name='upload' />应该是
<input type='file' name='uploads' />
因为在action中的定义是
private java.util.List<File> uploads;
2011-08-14 22:58 | amenmen

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

上传任意多个文件保存到数据库中怎么做(oracle数据库,blob类型)
2013-12-16 14:16 | sxx

# 单个文件上传错误  回复  更多评论   

我jsp页面选择文件后获得的是真实文件路径。但是提交到后台就是
java.io.InputStream is = new java.io.FileInputStream(upload);第一句话提示错误
java.io.FileNotFoundException: D:\tomcat7.0\work\Catalina\localhost\wyxfweb\upload_5931d1d4_1510eceb59e__8000_00000000.tmp (???????????)
2015-11-16 13:44 | 赵仁培

# re: Struts2教程7:上传任意多个文件  回复  更多评论   

多个文件上传成功 如何在成功页面显示已上传的文件名字??
2016-08-11 22:49 |

只有注册用户登录后才能发表评论。


网站导航: