1.我在webwork.properties中限制了文件上传的大小,那如何在程序中去控制文件的大小,也就是当文件上传的大小超过限制以后如何去返回给前台一个出错信息,而不是直接抛出异常?重载fileUpload?还是什么其它方法?
2.上传超过限制大小时,FileUploadInterceptor拦截器 不报错,而返回到自己写的action中时 相关file的属性都为空。包空指针错误。怎么才能把超过大小的错误在前台页面显示呢?
2.上传超过限制大小时,FileUploadInterceptor拦截器 不报错,而返回到自己写的action中时 相关file的属性都为空。包空指针错误。怎么才能把超过大小的错误在前台页面显示呢?
解决方案 »
- 用java 写一个10进制转16进制的算法 怎么写啊
- JSP 分页问题
- 谁有MultiActionController绑定command 的例子
- form中的action=""和action="itself.jsp"有什麼區別?
- 想学JSP大家给点意见,有什么好的电子资料方便学习(提供地址)
- 软件开发迷惑,该学习什么,希望能指点迷津。
- 请问用JSP怎么把网页做成像软件打开的样子
- 一个画树的问题
- 听说jsp比php更有前途,想学,但迷肓!请在职的程序员或过来人指点指点,谢谢!
- 关于Servlet与Socket的问题
- select></select>下拉菜单中的文字如何垂直居中
- 急急!!Spring3.1 +Struts2.整合和报错
在拦截器中把信息写到request或者session的MAP中,
然后在JSP页面中用表达式requestScope.XXXX或者
sessionScope.XXXX取出来就行了。
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
//取得文件名
String fileName = myFile.getFileName();
//取得文件大小
int fileSize = myFile.getSize();
<s:fielderror fieldName="upfile" /> //在此处显示错误信息
在action.properties文件中写struts.messages.error.file.too.large=\u4E0A\u4F20\u7684\u6587\u4EF6\u592A\u5927 即页面提示“上传文件太大”
webwork.properties里
webwork.multipart.maxSize = 62914560xwork.xml里也设了
<interceptor-stack name="fileUpload-validation-stack">
<interceptor-ref name="fileUpload">
<param name="maximumSize">62914560</param>
</interceptor-ref>
才50M文件为什么 public String intercept(ActionInvocation invocation) throws Exception {
ActionContext ac = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); if (!(request instanceof MultiPartRequestWrapper)) {
if (log.isDebugEnabled()) {
ActionProxy proxy = invocation.getProxy();
log.debug(getTextMessage("webwork.messages.bypass.request", new Object[]{proxy.getNamespace(), proxy.getActionName()}, ActionContext.getContext().getLocale()));
} return invocation.invoke();
} final Object action = invocation.getAction();
ValidationAware validation = null; if (action instanceof ValidationAware) {
validation = (ValidationAware) action;
} MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request; if (multiWrapper.hasErrors()) {
for (Iterator errorIter = multiWrapper.getErrors().iterator(); errorIter.hasNext();) {
String error = (String) errorIter.next(); if (validation != null) {
validation.addActionError(error);
} log.error(error);
}
} Map parameters = ac.getParameters(); // Bind allowed Files
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement(); // get the content type
String[] contentType = multiWrapper.getContentTypes(inputName); if (isNonEmpty(contentType)) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName); if (isNonEmpty(fileName)) {
// Get a File object for the uploaded File
File[] files = multiWrapper.getFiles(inputName);
if (files != null) {
for (int index = 0; index < files.length; index++) {
getTextMessage("webwork.messages.current.file", new Object[]{inputName, contentType[index], fileName[index], files[index]}, ActionContext.getContext().getLocale()); if ( acceptFile(files[index], contentType[index], inputName, validation, ac.getLocale())) {
parameters.put(inputName, files);
parameters.put(inputName + "ContentType", contentType);
parameters.put(inputName + "FileName", fileName);
}
}
}
} else {
log.error(getTextMessage("webwork.messages.invalid.file", new Object[]{inputName}, ActionContext.getContext().getLocale()));
}
} else {
log.error(getTextMessage("webwork.messages.invalid.content.type", new Object[]{inputName}, ActionContext.getContext().getLocale()));
}
} // invoke action
String result = invocation.invoke(); // cleanup
fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
String inputValue = (String) fileParameterNames.nextElement();
File[] file = multiWrapper.getFiles(inputValue);
for (int index = 0; index < file.length; index++) {
File currentFile = file[index];
log.info(getTextMessage("webwork.messages.removing.file", new Object[]{inputValue, currentFile}, ActionContext.getContext().getLocale())); if ((currentFile != null) && currentFile.isFile()) {
currentFile.delete();
}
}
} return result;
}
在我重写的拦截器中 while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
这一句就走不下去了(request里的参数都变成null的原因)
为什么呢,,难道xwork上传本身就有限制? 同求答案 谢谢
可否将解决方案发到