实现原理
Struts 2是通过Commons FileUpload文件上传。CommonsFileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦 截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
fileUpload拦截器必须在defaultStack(默认)拦截器前面配置,Struts2会由上到下执行拦截器。
<!--配置fileUpload的拦截器-->
<interceptor-refname="fileUpload">
<!--配置允许上传的文件类型-->
<paramname="allowedTypes">image/bmp,image/png,image/gif,image/jpeg
</param>
</interceptor-ref>
<interceptor-refname="defaultStack"/>
allowedTypes指定上传的文件类型,但类型不符只会在控制台输出警告语句,程序不会报错。
maximumSize指定上传的单个文件大小,但文件超出大小只会在控制台输出警告语句,程序不会报错。注意不能写成1024*1024*5的形式。
struts.xml里进行以下设置:
<constant name="struts.i18n.encoding" value="GBK"/>国际化资源文件编码
<constant name="struts.multipart.saveDir" val ="/temp"/>,这句指定了上传文件的临时存放目录
<constant name="struts.multipart.maxSize" val ="10240000"/>,Struts2的文件上传功能默认最大只能上传2M大小。这句重新指定了上传文件的总大小的最大限制,单位是字节。
//相关部分代码
页面文件中,将表单的提交方式设为POST,然后将enctype设为multipart/form-data
public class FileUploadAction extends ActionSupport
int BUFFER_SIZE = 1024*32;
File imageFile=newFile(ServletActionContext.getServletContext().getRealPath("/UploadImages")+"/"+imageFileName);
copy(myFile, imageFile);//或使用IOUtils.copy(in, out);
try{
InputStreamin=null;
OutputStream out=null;
try{
in=newBufferedInputStream(newFileInputStream(src), BUFFER_SIZE);
out=newBufferedOutputStream(newFileOutputStream(dst), BUFFER_SIZE);
byte[]buffer=newbyte[BUFFER_SIZE];
while(in.read(buffer)>0){
out.write(buffer);
}
}finally{
if(null!=in){
in.close();
}
if(null!=out){
out.close();
}
}
}catch(Exception e){
e.printStackTrace();
}
对应的国际化资源文件
大多数情况下,我们都需要自定义和国际化这些信息。
通过在全局的国际资源文件中加入
“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image” //文件类型
“struts.messages.error.file.too.large= too large " //上传文件的大小
“struts.messages.error.uploading=”//用提示一般的上传出错信息。
allowedExtensionsSet这是设置允许上传文件的后缀,多个类型以逗号“,”隔开,如果某个文件的后缀没在这个设置之类,则会产生一个错 误保存到Action中,错误的i18n的的key为 struts.messages.error.file.extension.not.allowed
相关推荐
例如,当用户上传一个文件后,我们可以使用FileUpload解析请求,获取到`FileItem`对象,然后使用Commons IO的工具类将文件保存到服务器的指定位置。 总之,`Fileupload`和`IO`的jar包是Java Web开发中处理文件上传...
例如,开发者可以先使用FileUpload解析出上传的文件,然后利用Commons IO将其保存到服务器的指定位置。 这两个库的源代码文件(sources)也一同提供,这对于学习和理解其内部实现机制非常有帮助。通过阅读源码,...
当用户通过HTML表单提交文件时,服务器端的JSP页面会利用FileUpload解析请求,获取文件内容,然后使用IO库处理这些内容,如存储到服务器、进行合法性检查、转换格式等。例如,你可以使用FileUpload的`...
JavaWeb新版教程-EL表达式&JSTL标签库-传-使用fileupload解析上传的数据.avi
以上代码展示了如何使用Commons FileUpload解析HTTP请求中的文件项,并通过Commons IO将文件保存到服务器的指定目录。 总的来说,Apache Commons FileUpload和Commons IO是Java开发者处理文件上传和I/O操作的强大...
例如,先用FileUpload解析上传请求,获取到文件信息,然后利用IO库进行文件的保存和处理。这两个库大大降低了开发复杂性,提高了代码的可维护性。在使用时,确保引入对应的版本,例如这里的`commons-fileupload-...
- **文件保存**:在FileUpload解析完文件后,通常会用到Commons IO来保存上传的文件。`FileUtils.writeByteArrayToFile()`可以将`FileItem`的字节数组内容写入到指定的文件中。 - **错误处理**:在处理过程中,如...
例如,可以创建一个Servlet来接收POST请求,使用Commons FileUpload解析请求中的文件数据,然后利用Commons IO处理文件的读写和转换。同时,这两个库也支持定制化,允许开发者根据实际需求调整文件处理策略。 在...
在Servlet中,我们需要设置一个临时目录来保存上传的文件,并初始化FileUpload解析器: ```java import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemIterator; import ...
1. **配置Servlet**:首先,你需要在Servlet中配置FileUpload解析器。这可以通过创建一个`ServletFileUpload`实例完成,它负责解析多部分请求。 2. **检查请求**:在Servlet的`doPost`方法中,检查请求是否为多部分...
3. 服务器端接收到请求后,使用Commons FileUpload解析多部分数据,创建`FileItem`对象表示每个文件或表单字段。 4. 开发者可以遍历`FileItem`集合,对每个文件执行相应的操作,如保存到服务器的某个目录,或者进行...
例如,使用FileUpload解析文件,然后利用IO库将文件写入目标位置,或者进行进一步的处理和验证。这两个库都是Java开发中处理文件上传的标准工具,极大地提高了开发效率并降低了错误发生的可能性。在开发过程中,合理...
在web.xml中配置`FilterDispatcher`(对于较旧的Struts2版本)或`StrutsPrepareAndExecuteFilter`(对于新版本),并设置`struts.multipart.parser`属性为`jakarta`,以启用Jakarta Commons FileUpload解析器。...
7. **文件上传流程**:通常涉及创建一个 HTML 表单,设置 `enctype="multipart/form-data"` 以支持文件上传,然后在后端使用 Commons FileUpload 解析请求,获取文件流,再写入服务器上的目标位置。 综上所述,...
在使用这两个库进行文件上传时,通常先利用Commons IO处理文件I/O,然后用Commons FileUpload解析HTTP请求中的多部分数据,提取上传的文件。这样可以构建出稳定、健壮的文件上传功能,同时避免了直接处理Servlet API...
2. 在Servlet或控制器中,使用Commons FileUpload解析请求,获取上传文件。 3. 检查文件类型、大小等,确保安全性。 4. 将文件保存到服务器的指定位置。 5. 可选地,提供反馈信息给用户,告知文件上传成功与否。 ...
使用Apache Fileupload解析请求,并保存上传的文件到服务器指定位置。注意设置合适的最大文件大小和内存阈值以防止溢出。 4. 关键知识点: - 多部分表单数据:在HTML中,`<form>`标签的`enctype="multipart/form-...
4. **临时存储**:配置FileUpload解析器以指定临时文件存储的位置,例如`/tmp`目录。 5. **文件保存**:从解析后的数据中,提取每个文件并将其保存到服务器的预定位置。可以设置自定义的文件名和路径策略。 6. **...
- **流程**:用户提交包含文件的表单,Servlet接收到请求后,通过FileUpload解析请求正文,然后将文件数据保存到服务器,通常以临时文件形式。 4. **实现步骤**: - **创建Servlet**:定义一个Servlet,重写`...
3. **处理文件上传**:在`UploadServlet`中,使用Apache Commons FileUpload解析请求并处理文件。首先,检查请求是否包含文件数据,然后创建一个DiskFileItemFactory实例,配置临时存储位置。接着,创建...