struts2 导致文件上传失败
各位我遇到了问题,具体表现在,当我尝试向服务器上传文件时,服务器无法取得上传文件的信息,当然也不能正常上传文件。
然后我将同样的代码分成两种情况往服务器上传文件,一种是使用struts2的情形,另一种则不启用struts2,我发现不启用struts2能够正常上传文件,而另一种总是失败。
我上网查找过相关问题,知道了一些问题所在,大概就是struts2将页面请求的request对象重新封装了一回,导致上传文件信息的丢失,但是我不能够解决这个问题。http://blogwarning.iteye.com/...
这是我找到的其中一个相似的情况,但是解决方案在我这里行不通。
以下是我的相关代码,希望能得到你们的帮助,感激不尽....
1.表单信息
<form name="form" action="addComInfo.action" method="post"
enctype="multipart/form-data">
<label>名称:<input type="text" name="name" /></label><br /> <label>类别:
<input type="radio" name="category" value="图书" />图书 <input
type="radio" name="category" value="配件" />配件 <input type="radio"
name="category" value="其它" />其它
</label><br /> <label>价格:<input type="text" name="price" /></label><br />
<label>数量:<input type="text" name="count" /></label><br /> <label>图片:<input
type="file" name="afile" /></label><br /> <label> <input
type="submit" value="提交" />
</label>
</form>
2.AddInfoAction.java
package com.duxingzhe.defined.filter;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class AddInfoAction extends ActionSupport {
@Override
public String execute() throws Exception {
return Action.SUCCESS;
}
}
3.servlet 中的upload()方法
public void upload(HttpServletRequest request, HttpServletResponse response) {
String message = "";
String url = this.getServletContext().getRealPath("WEB-INF/upload");
File file = new File(url);
if (!file.isDirectory() && !file.exists()) {
System.out.println("该目录不存在,需要创建");
file.mkdir();
}
System.out.println("url=" + url);
try {
DiskFileItemFactory disk = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(disk);
System.out.println("upload:" + upload.toString());
upload.setHeaderEncoding("utf-8");
if (!ServletFileUpload.isMultipartContent(request)) {
System.out.println("isM false");
return;
}
//items 为[]
List<FileItem> items = upload.parseRequest(request);
System.out.println("items:" + items.size());
Iterator<FileItem> iter = items.iterator();
// System.out.println("list="+iter.toString());
// System.out.println(iter.next());
while (iter.hasNext()) {
FileItem newItem = iter.next();
System.out.println("newItem" + newItem.toString());
if (newItem.isFormField()) {
String name = newItem.getFieldName();
String value = newItem.getString("utf-8");
System.out.println("普通字段");
System.out.println("name=" + name + ",value=" + value);
} else {
String filename = newItem.getName(); // 获取上传文件所在路径
System.out.println("file字段: " + filename);
if (filename == null || filename.trim().equals("")) {
continue;
}
filename = filename.substring(filename.lastIndexOf("\\") + 1);
InputStream input = newItem.getInputStream();
FileOutputStream fileOut = new FileOutputStream(url + "\\" + filename);
byte buffer[] = new byte[1024];
int len = 0;
while ((len = input.read(buffer)) > 0) {
fileOut.write(buffer, 0, len);
}
input.close();
fileOut.close();
newItem.delete();
message = "文件上传成功!";
}
}
} catch (Exception e) {
message = "文件上传失败!";
e.printStackTrace();
} finally {
System.out.println(message);
}
}
4.struts.xml 配置
<action name="addComInfo" class="com.duxingzhe.defined.filter.AddInfoAction"
method="execute">
<!-- <interceptor-ref name="addInfo"></interceptor-ref> -->
<result name="success">/AddShangpinInfo</result>
</action>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
struts2文件上传,它本身提供了拦截器实现文件的上传,struts2默认拦截器栈就有这个拦截器。
如果不想使用stuts2的,理论上把 Struts2 的 org.apache.struts2.interceptor.FileUploadInterceptor 拦截器关掉,你就可以直接处理上传的操作了。你自己试试看。