Struts2文件上传(一) Common-FileUpload

文件上传是许多项目都遇到的需求,Struts2中也带有文件上传功能,但它是利用的java领域的其他 俩个常用的文件上传的项目:Common- FileUpload和COS,在了解Struts2之前让我们了解下怎样使用 Common-FileUpload来实现文件上传以及文件上传实现过程中应该注意的问题。

在Common- FileUpload中,它把从客户端提交过来的表单封装成一个个FileItem对象,这也是它实现文件上传功能 的核心类。另一个很重要的类就是FileUploadBase,他的功能就是解析请求(request),如进行上传文 件大小验证,请求类型验证(文件上传的enctype要设置成multipart/form-data)等。我们经常用到它 的子类ServletFileUpload。在FileUploadBase解析 request的过程中会将文件保存到内存,如果文件大 小大于我们设置的缓存的大小,它将把文件的其他内容保存到一个临时目录,当我们对FileItem 对象实 现正真上传时会从内存区或临时目录将文件保存到正真的上传目录。而我们要做的就是进行简单的配置 ,可以用很少的代码就可以实现文件上传,而不用直接与IO流打交道。首先将文件上传过程中应注意的 地方了解下:

1.request请求的方法一定要是POST:method="post"

2.request请求的类型 一定要是multipart/form-data: enctype="multipart/form-data"

3.在对DiskFileItemFacotry 设置过程中repository参数代表文件保存的临时目录,如果不设置,系统将以System.getProperty ("java.io.tmpdir")代表的目录作为临时目录。

4.DiskFileItemFacotry中的sizeThreshold参数 代表保存到内存的大小,如果当个上传文件的大小小于这个值,则这个文件会暂时保存到内存中。如果 大于这个值,则多的部分会保存到临时目录中。单位为B。

5.ServletFileUpload中的sizeMax参 数是代表上传文件的总大小,单位为B

6.要对FileItem进行上传操作,首先要判断isFormField() 为false,因为系统将每个表单项解析成一个FileItem,这其中也包括不是文件上传的表单项。所以要判 断是否为文件上传表单项。

下面用Servlet简单的实现文件上传:

upload.jsp

Java代码

<body>
<form method="post"  id="uploadForm" action="UploadServlet" enctype="multipart/form-data" >
<table  style="border: 1px solid;" align="center">
<thead>
<tr>
<td style="text-align: center" colspan="2">文件上传</td>
</tr>
</thead>
<tbody>
<tr>
<td>用户 名:</td>
<td><input type="text"  name="user.username"></input></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text"  name="user.password"></input></td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file1"/>
</td>
</tr>
<tr>
<td colspan="2">
<input  type="file" name="file2"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file3"/>
</td>
</tr>
<tr>
<td><input type="button"  value="Login" id="upload"/></td>
<td><input type="button"  value="Cancel" id="cancelUpload"/></td>
</tr>
</tbody>
</table>
</form>
</body>

UploadServlet

Java代码

protected void  doPost(HttpServletRequest request,
HttpServletResponse response) throws  ServletException, IOException {
try {
DiskFileItemFactory factory = new  DiskFileItemFactory();
// 设置临时缓存大小,文件大于这个值的部分保存到临时目录
factory.setSizeThreshold(1024 * 128);
//设置文件保存临时目录
factory.setRepository(new File(
"C:\\Documents and Settings\\bond\\temp"));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传内容大小
upload.setSizeMax(1024 * 1024*512);

List fileItems =  upload.parseRequest(request);
for (FileItem fi : fileItems) {
if (! fi.isFormField()) {
fi
.write(new File("D:\\bond\\upload", fi
.getName ()));
}
}
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (Exception e) {
e.printStackTrace();
request.getRequestDispatcher("failure.jsp").forward(request,
response);
}

时间: 2024-10-18 10:45:24

Struts2文件上传(一) Common-FileUpload的相关文章

8、如何自学Struts2之Struts2文件上传[视频]

8.如何自学Struts2之Struts2文件上传[视频]   之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上:   http://pan.baidu.com/s/1kTDsa95 由于本次视频没有声音,将会在下节课"Struts2数据库访问"这一节课,一起再讲一下. 注意:不好意思,不知道为什么在这次录制过程中没有声音,很抱歉,本节重点是碰到一个空指针异常,原因是fileUpload这个拦截器要放在其他拦截器之前才没

java中Struts2文件上传问题详解_java

首先是网页部分,upload_file.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html> <head> <title>Upload File</title> </head> <body> <form act

关于struts2文件上传和保存到数据库的同步问题!急~

问题描述 利用struts2文件上传后,对文件信息保存到数据库.文件上传成功后,对文件信息进行保存,失败则不保存.问题就在于如果文件上传成功后,对数据库保存失败,那么该如何保持事务的准确性.目前相到两种解决方法:1.建立temp临时文件夹,当保存数据库成功,则copy文件到正式目录,不论文件上传成功失败,最后删除temp.(麻烦)2.使用异步对文件进行操作.(不大清楚实现逻辑)希望大家能给我提供方案.谢谢~ 解决方案 先插入数据,成功则保存文件,不成功则不进行处理不就可以了么解决方案二:同意ji

SSH框架网上商城项目第13战之Struts2文件上传功能_java

上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说.为此,这篇文章详细介绍一下Struts2实现文件上传的功能.1. 封装文件信息我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件.文件类型和文件名.针对我们要传的图片,我们新建一个Model如下: public class FileImage { private File file; private String contentType; private String file

struts2 文件上传时,某次上传失败之后的所有上传都返回input,不跳到action

问题描述 在做文件上传时,不加限制上传任意类型文件都成功,但是如果加了"allowedTypes"限制文件类型后,上传正确类型成功,上传错误类型失败,这些都是理所当然的结果.问题是上传错误类型失败后,再上传正确的文件,也跳转到input视图,不经过action.如限制只能上传gif格式文件,第一次上传gif图片返回success:第二次上传非gif文件,返回input:第三次上传gif文件,还是返回input,怎么解决?代码如下:jsp页面: <s:form action =&q

新手求助,struts2文件上传的错误

问题描述 我在跑这段代码的时候遇到了java.lang.NullPointerException错误,代码和错误如下.可是如果我把execute函数改为直接返回SUCCESS就没有错误了,希望各位大神能帮帮我,谢谢了~publicclassUploadActionextendsActionSupport{//封装文件标题请求参数的属性privateStringtitle;//封装上传文件域的属性privateFileupload;//封装上传文件类型的属性privateStringuploadC

Struts2文件上传

以一个图片上传为例子,演示了文件上传的各个方面.包括客户端控制,服务端控制,图片预览,图片压缩等. 采用struts2的文件上传机制,除struts2必要的jar外还需要额外导入commons-fileupload.jar,commons-io-1.4.jar web.xml配置: 首先是一个上传界面及其HTML,和一个静态常量类: 客户端: 若直接点击上传,则效果如下: 对应的JS代码如下: 若是选择了非规定类型的文件,则效果如下

struts2 文件上传 三种方式

struts.multipart.maxSize=10240000:用于限制上传文件的大小struts.multipart.allowedTypes=.xls,.zip:用于限制上传文件类型struts.multipart.parser=pell:解决上传空文件的报错问题 struts.multipart.saveDir:该属性指定上传文件的临时保存路径,该属性的默认值是javax.servlet.context.tempdir 第一种方式 package com.ljq.action; imp

关于Struts2文件上传与自定义拦截器_java

一.访问或添加request/session/application属性 public String scope() throws Exception{   ActionContext ctx = ActionContext.getContext();   ctx.getApplication().put("app", "应用范围");//往ServletContext里放入app   ctx.getSession().put("ses", &q