问题描述:我想使用JSP创建文件上传屏幕。屏幕将允许用户在屏幕上选择多个文件,但所有文件只有一个“上传”按钮。单击上载按钮后,应在Action类中获取所有文件对象。
但是重要的是页面提交后不应刷新。在同一屏幕上还会显示其他信息,在文件上传过程中不应更改这些信息。
我的尝试:我使用了简单的struts2文件上传功能,效果很好。但是它正在刷新提交页面。我使用AJAX(JQuery)来解决此问题。我使用AJAX面临的问题是它没有将File对象设置为Action类的file属性。因此,我无法在Action类中获取文件对象并进一步处理。
谁能帮我这个忙。
我将附加到目前为止我尝试过的所有代码。
JSP :
<s:form action="fileUpload" method="post" enctype="multipart/form-data" >
<s:file id="file" name="userImage" cssClass="fileUpload" cssStyle="fileUpload" />
<button id="px-submit">Upload</button>
</s:form>
<script type="text/javascript">
jQuery(function($){
$('.fileUpload').fileUploader();
});
</script>
jQuery插件 : 这是我使用过的jquery插件。
动作类 :
public class FileUploadAction extends ActionSupport{
private File userImage;
public File getUserImage() {
return userImage;
}
public void setUserImage(File userImage) {
this.userImage = userImage;
}
public String execute()
{
try
{
System.out.println("file name: " + userImage.toString());
}
catch(Exception e)
{
e.printStackTrace();
}
return SUCCESS;
}
编辑:这是我的struts配置文件。
Struts.xml
<action name="commonDataImportAction_*" class="xxx.Action">
<result name="SUCCESS" type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
由于文件对象未设置,我在这里得到了一个空指针。
请帮忙。
提前致谢。高拉夫
我正在使用相同的插件,对我来说效果很好。我在您的代码中看到的第一个问题是您尚未设置要提交的上传按钮的类型。
<button id="px-submit" type="submit">Upload</button>
希望这应该解决null指针除外。另外,如该插件的文档中所述,您需要返回一个json字符串
<div id='message'>success message</div>
成功上传。因此,您需要更改struts.xml映射。尝试此操作,如果您遇到任何其他问题,请立即与我联系。编辑:好的,这是您要求的我的代码
JSP
<form action="uploadImage" method="post" enctype="multipart/form-data">
<input type="file" name="image" class="fileUpload" multiple/>
<button id="px-submit" type="submit">Save all images</button>
<button id="px-clear" type="reset">Clear all</button>
</form>
$('.fileUpload').fileUploader({
autoUpload: false,
buttonUpload: '#px-submit',
buttonClear: '#px-clear',
});
动作课
您需要返回流结果。我使用的插件(struts2的jQuery插件),它采用的是变化很好地照顾,但你 不
必须使用它仅仅是因为这一要求,而不是我给你返回流结果的代码,而无需使用任何插件。(摘自从这里)
public class UploadImageAction extends ActionSupport{
private File image;
private String imageContentType;
private String imageFileName;
//getter/setter for these
public String execute() {
String status="";
try{
//save file code here
status="<div id='message'>successfully uploaded</div>"; //on success
inputStream = new StringBufferInputStream(status);
}catch(WhateverException e){
status="<div id='status'>fail</div><div id='message'>Your fail message</div>"; //on error
inputStream = new StringBufferInputStream(status);
//other code
}
return SUCCESS;
}
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
}
struts.xml
<action name="fileUpload" class="com.xxx.action.UploadImageAction">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
有一个工作的Struts2Portlet环境,在portlet模式下,我无法使Struts文件上传工作。 我看得出来 将在临时空间中创建一个文件上载到服务器 原始请求上存在一个多部分请求,其中包含文件名和文件内容,并在其中输入Struts类 我可以触发最大大小响应,这是Struts中设置的默认值 FileUploadInterceptor被触发,但在Jakarta MultipartRequest
问题内容: 我试图在不实际使用用户输入文件的情况下伪造文件上传。文件的内容将从字符串动态生成。 这可能吗?有人做过吗?有例子/理论可用吗? 澄清一下,我知道如何使用隐藏的iframe和朋友使用AJAX技术上传文件-问题是上传的文件格式不正确。 我正在使用ExtJS,但是jQuery也是可行的,因为ExtJS可以插入其中(ext-jquery-base)。 问题答案: 为什么不只与POST一起使用?
问题内容: 我正在尝试使用ajax上传文件,这给了我一个错误,其余的数据上传成功了,我尝试了不使用ajax进行文件上传,但是当我尝试通过ajax上传文件时给了我错误,我完全困惑为什么ajax给我问题。这是我的代码。 process.php文件编码在这里。 问题答案: 首先,serialize()函数不适用于文件,您应该使对象成为可通过其发布数据的表单对象,并且可以完美地工作。因为我已经测试过了 请
我需要谷歌地图的帮助 我的文件: 函数initialize(){ var latlng=new google.maps.latlng(55.472627,23.15918); var EncodedString;var stringArray=[]; encodedString=Document.GetElementById(“encodedString”).Value;stringArray=E
主要内容:创建视图文件:,创建action类:,配置文件:,错误消息:Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传。上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的目录,以确保数据不丢失。 请注意,服务器有一个安全策略可能会禁止写到目录以外的临时目录和属于web应用的目录。 在Struts中的文件上传是通过预先定义的拦截文件上传拦截器这是可通过org.apache.struts2.in
我在运行这个代码时遇到了一个问题。我总是收到这样的消息:“文档没有页面”,在pdf文件中有一个空白页。 注意:我使用的是NetBeans IDE7.2测试版。 null 这是我的代码: 我真的很感激你的帮助。