如何用struts实现文件上传(multipart/request-data)(另赠高分,份贴付款)

shiquan 2003-10-11 10:15:09
需要同时上传一个文件和一些字符串(String,里边是些文件的查询条件)。在页面中加入相应标签,已经和ActionForm里的变量连接上了。将form标签的enctype也设成了"multipart/request-data"。可是运行后Action中使用form.getMultipartRequestHandler();返回的仍是null.请问怎么做才能成功。

我后来认为我不应该把<html:file>和ActionForm中的String标签连接起来,就改用html的input来代替,还将ActionForm中的相应变量删掉,可是仍然返回null!

怎么才能成功呢?请诸位仁兄给个方法。100分不够可以多给。我好像只能一贴给100分。
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
double22822 2003-10-11
  • 打赏
  • 举报
回复
下在一个“无组件上传”就什么都办到了!
pleonheart 2003-10-11
  • 打赏
  • 举报
回复
用jspSmartUpload + Servlet吧
shiquan 2003-10-11
  • 打赏
  • 举报
回复
ok,解决。不过还没看回复就解决了。散分100:)
hj12 2003-10-11
  • 打赏
  • 举报
回复
/*
* $Header: /home/cvs/jakarta-struts/src/upload/org/apache/struts/webapp/upload/UploadForm.java,v 1.8 2003/02/28 02:18:23 dgraham Exp $
* $Revision: 1.8 $
* $Date: 2003/02/28 02:18:23 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Struts", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/

package org.apache.struts.webapp.upload;


import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.MultipartRequestHandler;


/**
* This class is a placeholder for form values. In a multipart request, files are represented by
* set and get methods that use the class org.apache.struts.upload.FormFile, an interface with
* basic methods to retrieve file information. The actual structure of the FormFile is dependant
* on the underlying impelementation of multipart request handling. The default implementation
* that struts uses is org.apache.struts.upload.CommonsMultipartRequestHandler.
*
* @author Mike Schachter
* @version $Revision: 1.8 $ $Date: 2003/02/28 02:18:23 $
*/

public class UploadForm extends ActionForm
{
public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";


/**
* The value of the text the user has sent as form data
*/
protected String theText;

/**
* The value of the embedded query string parameter
*/
protected String queryParam;

/**
* Whether or not to write to a file
*/
protected boolean writeFile;

/**
* The file that the user has uploaded
*/
protected FormFile theFile;

/**
* The file path to write to
*/
protected String filePath;



/**
* Retrieve the value of the text the user has sent as form data
*/
public String getTheText() {
return theText;
}

/**
* Set the value of the form data text
*/
public void setTheText(String theText) {
this.theText = theText;
}

/**
* Retrieve the value of the query string parameter
*/
public String getQueryParam() {
return queryParam;
}

/**
* Set the value of the query string parameter
*/
public void setQueryParam(String queryParam) {
this.queryParam = queryParam;
}

/**
* Retrieve a representation of the file the user has uploaded
*/
public FormFile getTheFile() {
return theFile;
}

/**
* Set a representation of the file the user has uploaded
*/
public void setTheFile(FormFile theFile) {
this.theFile = theFile;
}

/**
* Set whether or not to write to a file
*/
public void setWriteFile(boolean writeFile) {
this.writeFile = writeFile;
}

/**
* Get whether or not to write to a file
*/
public boolean getWriteFile() {
return writeFile;
}

/**
* Set the path to write a file to
*/
public void setFilePath(String filePath) {
this.filePath = filePath;
}

/**
* Get the path to write a file to
*/
public String getFilePath() {
return filePath;
}

public void reset() {
writeFile = false;
}

/**
* Check to make sure the client hasn't exceeded the maximum allowed upload size inside of this
* validate method.
*/
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrors errors = null;
//has the maximum length been exceeded?
Boolean maxLengthExceeded = (Boolean)
request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue()))
{
errors = new ActionErrors();
errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED, new ActionError("maxLengthExceeded"));
}
return errors;

}
}
hj12 2003-10-11
  • 打赏
  • 举报
回复
<%@ page import="org.apache.struts.action.*,
java.util.Iterator,
org.apache.struts.webapp.upload.UploadForm"%>
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<html>
<head>
<title>File Upload Example</title>
</head>

<body>
<!-- Find out if the maximum length has been exceeded. -->
<logic:present name="<%= Action.ERROR_KEY %>" scope="request">
<%
ActionErrors errors = (ActionErrors) request.getAttribute(Action.ERROR_KEY);
//note that this error is created in the validate() method of UploadForm
Iterator iterator = errors.get(UploadForm.ERROR_PROPERTY_MAX_LENGTH_EXCEEDED);
//there's only one possible error in this
ActionError error = (ActionError) iterator.next();
pageContext.setAttribute("maxlength.error", error, PageContext.REQUEST_SCOPE);
%>
</logic:present>
<!-- If there was an error, print it out -->
<logic:present name="maxlength.error" scope="request">
<font color="red"><bean:message name="maxlength.error" property="key" /></font>
</logic:present>
<logic:notPresent name="maxlength.error" scope="request">
Note that the maximum allowed size of an uploaded file for this application is two megabytes.
See the /WEB-INF/struts-config.xml file for this application to change it.
</logic:notPresent>

<br /><br />
<!--
The most important part is to declare your form's enctype to be "multipart/form-data",
and to have a form:file element that maps to your ActionForm's FormFile property
-->
<html:form action="upload.do?queryParam=Successful" enctype="multipart/form-data">

Please enter some text, just to demonstrate the handling of text elements as opposed to file elements:<br />
<html:text property="theText" /><br /><br />

Please select the file that you would like to upload:<br />
<html:file property="theFile" /><br /><br />

If you would rather write this file to another file, please check here:
<html:checkbox property="writeFile" /><br /><br />

If you checked the box to write to a file, please specify the file path here:<br />
<html:text property="filePath" /><br /><br />

<html:submit />


</html:form>
</body>
</html>
hj12 2003-10-11
  • 打赏
  • 举报
回复
呵呵!你为什么不看他自己的例子那?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧