在Struts 2中实现文件上传

<!--done-->
评论:
# re: 在Struts 2中实现文件上传 2007-03-21 16:33 | 大菜虫
max大大我现在刚开始学习Struts 2.0.6按照您在Struts 2.0系列之一里的方法去做可是生成war文件上传到tomcat上,tomcat启动都报错,我用的是zip的tomcat5.5.23。我发现在Struts 2.0.6中没有struts2-api.jar这个文件。是tomcat配置出了问题。还是没有struts2-api.jar这个文件的原因。 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-21 16:39 | 山风小子
您写的Struts2系列很详尽,在此表示感谢! 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-22 09:27 | 太阳里的雪
不错的资料,Struts2本来就是Webwork的后续版本,学了Webwork就等于学习了Struts2. 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-23 09:15 | yangdamao
請問如何查看服务器控制台输出?----多多指教 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-23 09:54 | Max
@yangdamao
不同服务器,有不同的方法,建议通过IDE启动服务器,这样可以在IDE的控制台查看输出。
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-23 11:39 | yangdamao
我用的是tomcat6.0,麻煩詳細描述一下,這方面的知識嚴重欠缺,tks! 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-03-23 17:16 | evan
呵呵!能不能写一个struts2 ajax方面的啊?
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-27 08:16 | jintian
javax.servlet.ServletException: String index out of range: -1
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)

這是啥錯誤??
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-28 08:13 | jintian
在struts.xml為什么不要
引入< include file ="struts-default.xml" /> ﹗
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-03-28 09:35 | A++
@jintian
我昨天也碰到了这个问题
你可以试着把public String execute()中的空格去掉
方法是查找替换~~-:) 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-04-03 14:22 | Michael
我在上传文件的时候提示我
com.opensymphony.xwork2.config.ConfigurationException: Unable to load bean
org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta)
只要把<s:form>里的 enctype ="multipart/form-data"去掉就不出这个提示了。请问这是怎么回是呢? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-05 11:54 | ccz
估计是你少加了类包!特别是那个IO的 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-09 22:30 | eddie
请问在哪里加入struts.messages.error.content.type.not.allowed=The file you uploaded is not a image,我试过很多地方都不行 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-09 22:36 | eddie
struts.messages.error.content.type.not.allowed=The file you uploaded is not a image 后来在全局文件global_message.properties里面添加成功了,但是为什么在package.properties里面不行呢 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-09 23:26 | Max
@eddie
这是因为GetText()方法是在org.apache.struts2.interceptor.FileUploadInterceptor类中被调用,而不是在你的Action类的验证方法中被调用。
代码如下:
private String getTextMessage(String messageKey, Object[] args, Locale locale) {
if (args == null || args.length == 0) {
return LocalizedTextUtil.findText(this.getClass(), messageKey, locale);
} else {
return LocalizedTextUtil.findText(this.getClass(), messageKey, locale, DEFAULT_MESSAGE, args);
}
} 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-10 10:08 | furong
我想问一下,下载包中的lib文件夹中没有commons-fileupload-1.1.1.jar
commons-io-1.1.jar这两个包,那这两个包是不是要专门下啊 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-10 23:08 | Max
@furong
是的,到APACHE下载! 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-25 16:26 | ddd
@大菜虫
跟struts-api.jar没有关系, 2.06版的没有api包了,2.05有。。

估计是你其他地方配置有问题,你在本地Server上运行没有问题吗? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-04-25 16:27 | ddd
# re: 在Struts 2中实现文件上传[未登录] 2007-04-26 16:33 | Z
请问如何在struts.properties文件里用struts.multipart.maxSize对不同的上载限制不同的大小啊? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-02 14:04 | 杰克
在对多文件上传进行格式验证时,由于文件同名,在报错时发生一人犯错全家株连的问题,这个问题该怎么办呢? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-10 08:48 | satanxm
请问用ajax 该怎么样上传文件呢,
我把你的例子中的程序 中的 form 和 submit 该为theme 改为 ajax
就是不能用,目标div上出来个 [HTMLobject ] 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-15 12:46 | pengzhan
有没有关于下载的东东??? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-19 11:43 | zy
上传的jsp编码似乎一定要设置成"UTF-8",GBK的话就不行了。 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-24 11:14 | 文温
我的struts使用的gbk编码
提交时经常出现,再刷新能显示正常,请问怎么使用gbk编码上传文件
javax.servlet.ServletException
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421) 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-24 11:43 | 文温
对不起了
我没有在web.xml文件中增加过滤器

< filter >
< filter-name > struts-cleanup </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.ActionContextCleanUp
</ filter-class >
</ filter >
能帮忙解释一下这个过滤器的作用是什么吗? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-25 10:29 | Max
@文温
By adding this filter, the FilterDispatcher will know to not clean up and instead defer cleanup to this filter. 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-05-28 19:00 | gpiaofei2006
org.apache.struts2.ServletActionContext 在哪个包里啊,我的无法import 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-06-20 17:03 | jpma
@gpiaofei2006
在struts2-core-2.0.6.jar中! 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-06-27 10:27 | fcnh1983@163.com
HTTP Status 404 - /uploadfile/FileUpload

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

type Status report

message /uploadfile/FileUpload

description The requested resource (/uploadfile/FileUpload) is not available.

为什么我按照你出现上面这个错误??????谁能帮忙回答下 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-03 10:12 | carlos175
一运行就会出现这个问题是怎么回事呢?

HTTP ERROR: 500
Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
RequestURI=/webapps/upload/fileUpload

Caused by:
java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]

把enctype ="multipart/form-data"去掉后就会出现:
HTTP ERROR: 404
NOT_FOUND
RequestURI=/webapps/upload/fileUpload

但是说enctype ="multipart/form-data" 这个是必须的~
貌似是无法加载MultiPartRequest这个东西。应该如何解决呢? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-03 12:03 | trying
使用这个代码的时候总是出现:
HTTP ERROR: 404
NOT_FOUND
RequestURI=/webapps/upload/fileUpload

这个错误。是怎么回事呢?


P.S:LS的只要导入commons-io那个jar就可以解问题。 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-04 22:49 | Max
@carlos175
@trying
是否缺少某些包? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-06 12:25 | carlos175
问题已经都解决了。
多谢Max的这篇文章。感觉写的很不错。
这周刚刚开始使用struts2。感觉和struts1.2差别还是挺大的。刚刚开始写有点不适应。
特别是昨天在写表单处理的时候感觉布局上就变了。
一个标签就一行。如果我在标签中加入了theme属性的话那么就可以解决。
恩,希望Max能够给出一篇介绍struts2标签使用比较详细的文章。再次感谢你提供了这篇不错的文章。 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-07-16 11:35 | Joe
@A++

我也遇到该问题,我试了你说的方法,还是报错java.lang.StringIndexOutOfBoundsException: String index out of range: -1
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-27 14:39 | renminyan
HTTP Status 500 -
-----------------------------------
type Exception report

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

exception

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:700)
org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:330)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:390)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)


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


Apache Tomcat/5.5.20


为什么我每个例子多要调半天才出来呢?
技术不到家max帮帮忙?希望自己快点长进~~~~~~~ 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-07-31 12:03 | Allen
感觉写的8错。有点相见恨晚的感觉^_^,但是我有几个地方8懂,请指教。

上传文件最大是多大?

上传的进度究竟怎么查看?

你只列出了Image的,那么我控制别的格式的文件上传呢?比如说zip和XML文件

如果文件忒大,我是否可以在上传之前就终止上传,太大的话Struts2好像是直接抛一个错误。

struts2最大可以上传多大的文件,我听说好像只有30Mの 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-31 23:19 | Max
@renminyan
请细心对照我文中的步骤去做,结果应该会出来的。
或者你的WEB-INF/web.xml的内容,是否有加入:
< filter >
< filter-name > struts2 </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.FilterDispatcher
</ filter-class >
</ filter > 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-07-31 23:32 | Max
@Allen

1、你可以使用参数“maximumSize”来限制上传文件的大小,它默认值是2mb;

2、上传进度需要使用AJAX技术实现,具体你可以Google一下Ajax File Upload;

3、你可以查看一下zip和xml的MIME类型,如果我记错的啊应该分别是application/zip和text/xml;

4、太大的文件,不建议使用HTTP的上传,可以使用专门的FTP或者其它协议。 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-08-02 16:17 | Allen

@Max

谢谢MAX的解答

1.我已经把他设置到30M了,但是客户如果而已上传大文件的话还是不能捕获异常,就让他抛出异常吧…………

2.Ajax Fileupload这个我会了。但是Ajax+Struts2实现我就8会了……因为Struts2包装的太严实了,我都无从下手的感觉。它好像直接在setter方法前边就把他搞定了。但是setter是在execute方法之前执行的……所以要在execute里边实现这个东西貌似不太现实。
是否利用拦截器可以呢?所以就这个问题我希望方便的话可否解答下。感谢! 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-08-09 11:44 | james
上传文件好像不能用modelDriven模式,感觉有点不太舒服 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-15 14:51 | baekham
文件上传fileUpload拦截器allowedTypes设置疑问?
<interceptor-ref name="fileUpload" >
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg
</param>
</interceptor-ref>
为什么png、jpeg类型的图片不能上传,提示上传文件格式错误. 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-15 22:15 | 王佳
如果在一个信息编辑页面
上传图片只是其中一个字段
但图片已经上传
而我只是需要修改其他信息的时候
这个时候,修改就会不能通过。
Content-Type not allowed: myFile "upload_4e0e6f19_113d55eebb4__8000_00000007.tmp" application/octet-stream

请问:有什么好的解决办法? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-16 13:32 | zhw
上传时指定文件大小后
上传文件超过指定大小,就不能再次打开上传页面。报下面的错误:
Struts Problem Report
Struts has detected an unhandled exception:

Messages: No result defined for action com.superweb.web.action.ResideAction and result input

File: file:/D:/Eclipse/eclipse/workspace/SuperWeb/WebRoot/WEB-INF/classes/struts/struts_reside.xml
Line number: 25
Column number: 70

只能重新启动服务器
我用的是spring2+hibernate3+struts2
请问:如何解决?
dwr+struts1.2可以实现上传进度条,请问在struts2中如何实现的?
回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-17 12:56 | babala
Max,

<param name="allowedTypes">
image/png,image/bmp,image/gif,image/jpeg,image/jpg
</param >中,只有bmp与gif格式可以上传,其他三个都说格式不正确,这是为什么?
另外为什么不直接使用png,bmp,gif....这种格式,而要在前面加上个image? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-27 18:15 | libinbin
回楼上 image/jpg 改成 image/JPG 就行了 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-08-29 13:50 | Ouch
好像还应该加入包servlet-api.jar !!! 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-03 16:58 | li
好像filename取出来的是null呀,有人碰到这种情况吗? 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-09-04 09:40 | Mike
我取出来的filename也是null啊,到底怎么搞的,有些地方没有讲清楚 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-04 16:13 | tf
我取出的也是null,
运行出现下面的错误提示,也就是值都没有传过去.请高手指教
type Exception report

message

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

exception

java.lang.NullPointerException
tutorial.FileUpload.getExtention(FileUpload.java:76)
tutorial.FileUpload.execute(FileUpload.java:82)
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:585)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:334)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:195)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:118)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:155)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:180)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:204)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
org.apache.struts2.impl.StrutsActionProxy$1.call(StrutsActionProxy.java:25)
org.apache.struts2.impl.StrutsActionProxy$1.call(StrutsActionProxy.java:24)
org.apache.struts2.impl.RequestContextImpl.callInContext(RequestContextImpl.java:147)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:23)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:317)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:242)

回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-04 17:03 | tf
怎么没有人回答?请高手指教 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-05 00:35 | Max
@Mike
@tf
请细心对照我文中的步骤去做,结果应该会出来的。
或者你的WEB-INF/web.xml的内容,是否有加入:
< filter >
< filter-name > struts2 </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.FilterDispatcher
</ filter-class >
</ filter > 回复 更多评论
# re: 在Struts 2中实现文件上传[未登录] 2007-09-07 15:59 | Mike
@li
@tf
我想我大概知道错误的原因了,你们可能是漏了一些get/set方法,或者是自己在struts.xml中加入了<interceptor name ="fileUploadStack" class ="tutorial.FileUploadInterceptor" />,这个不需要自己加入的,是struts2内置的interceptor,会自动调用。我希望我的解决方法可以对你们有用,这里也要对max说声对不起了,没有跑出来是自己没按照规则来做。 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-10 16:59 | tf
请问Max可以出个和文件上传对应的文件下载的例子吗? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-10 17:09 | tf
谁有和文件下载的的例子的麻烦发到我邮箱好吗?
我的邮箱是susu_zi@126.com 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-12 15:53 | shenchong
Max,请问一下为什么我在做多附件上传的时候uploads里面的内容是String型的,而不是File类型的 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-13 00:19 | Max
@tf
Struts 2 的Show Case中有相关的例子
@shenchong
你看错了吧? 回复 更多评论
# re: 在Struts 2中实现文件上传 2007-09-13 11:04 |
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值