`

FileUpload解析

阅读更多

实现原理

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和io的jar包

    例如,当用户上传一个文件后,我们可以使用FileUpload解析请求,获取到`FileItem`对象,然后使用Commons IO的工具类将文件保存到服务器的指定位置。 总之,`Fileupload`和`IO`的jar包是Java Web开发中处理文件上传...

    commons-fileupload和commons-io的jar包

    例如,开发者可以先使用FileUpload解析出上传的文件,然后利用Commons IO将其保存到服务器的指定位置。 这两个库的源代码文件(sources)也一同提供,这对于学习和理解其内部实现机制非常有帮助。通过阅读源码,...

    commons-fileupload-1.3.2jar包和commons-io-2.5jar包.zip

    当用户通过HTML表单提交文件时,服务器端的JSP页面会利用FileUpload解析请求,获取文件内容,然后使用IO库处理这些内容,如存储到服务器、进行合法性检查、转换格式等。例如,你可以使用FileUpload的`...

    JavaWeb新版教程-EL表达式&JSTL标签库-传-使用fileupload解析上传的数据.avi

    JavaWeb新版教程-EL表达式&JSTL标签库-传-使用fileupload解析上传的数据.avi

    commons-fileupload-1.2.1.jar

    以上代码展示了如何使用Commons FileUpload解析HTTP请求中的文件项,并通过Commons IO将文件保存到服务器的指定目录。 总的来说,Apache Commons FileUpload和Commons IO是Java开发者处理文件上传和I/O操作的强大...

    commons-fileupload.jar和commons-io.jar包

    例如,先用FileUpload解析上传请求,获取到文件信息,然后利用IO库进行文件的保存和处理。这两个库大大降低了开发复杂性,提高了代码的可维护性。在使用时,确保引入对应的版本,例如这里的`commons-fileupload-...

    commons-fileupload + commons-io-1.4.jar

    - **文件保存**:在FileUpload解析完文件后,通常会用到Commons IO来保存上传的文件。`FileUtils.writeByteArrayToFile()`可以将`FileItem`的字节数组内容写入到指定的文件中。 - **错误处理**:在处理过程中,如...

    commons-文件上传必备jar包二合一-io1.4+fileupload1.2.1

    例如,可以创建一个Servlet来接收POST请求,使用Commons FileUpload解析请求中的文件数据,然后利用Commons IO处理文件的读写和转换。同时,这两个库也支持定制化,允许开发者根据实际需求调整文件处理策略。 在...

    文件上传,进度条,fileupload

    在Servlet中,我们需要设置一个临时目录来保存上传的文件,并初始化FileUpload解析器: ```java import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemIterator; import ...

    org.apache.commons-fileupload-1.2.1.jar及上传文件的Demo

    1. **配置Servlet**:首先,你需要在Servlet中配置FileUpload解析器。这可以通过创建一个`ServletFileUpload`实例完成,它负责解析多部分请求。 2. **检查请求**:在Servlet的`doPost`方法中,检查请求是否为多部分...

    commons-fileupload-1.2.1.jar和commons-io-1.4.jar

    3. 服务器端接收到请求后,使用Commons FileUpload解析多部分数据,创建`FileItem`对象表示每个文件或表单字段。 4. 开发者可以遍历`FileItem`集合,对每个文件执行相应的操作,如保存到服务器的某个目录,或者进行...

    commons-fileupload-1.3.2和commons-io-2.5

    例如,使用FileUpload解析文件,然后利用IO库将文件写入目标位置,或者进行进一步的处理和验证。这两个库都是Java开发中处理文件上传的标准工具,极大地提高了开发效率并降低了错误发生的可能性。在开发过程中,合理...

    struts2上传文件需要的jar包 commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

    在web.xml中配置`FilterDispatcher`(对于较旧的Struts2版本)或`StrutsPrepareAndExecuteFilter`(对于新版本),并设置`struts.multipart.parser`属性为`jakarta`,以启用Jakarta Commons FileUpload解析器。...

    richface fileupload jar包

    7. **文件上传流程**:通常涉及创建一个 HTML 表单,设置 `enctype="multipart/form-data"` 以支持文件上传,然后在后端使用 Commons FileUpload 解析请求,获取文件流,再写入服务器上的目标位置。 综上所述,...

    commons-fileupload-1.2.1.jar commons-io-1.4.jar

    在使用这两个库进行文件上传时,通常先利用Commons IO处理文件I/O,然后用Commons FileUpload解析HTTP请求中的多部分数据,提取上传的文件。这样可以构建出稳定、健壮的文件上传功能,同时避免了直接处理Servlet API...

    commons-fileupload-1.2.1、commons-io-2.0

    2. 在Servlet或控制器中,使用Commons FileUpload解析请求,获取上传文件。 3. 检查文件类型、大小等,确保安全性。 4. 将文件保存到服务器的指定位置。 5. 可选地,提供反馈信息给用户,告知文件上传成功与否。 ...

    jQuery Uploadify + Apache Fileupload异步上传文件示例

    使用Apache Fileupload解析请求,并保存上传的文件到服务器指定位置。注意设置合适的最大文件大小和内存阈值以防止溢出。 4. 关键知识点: - 多部分表单数据:在HTML中,`&lt;form&gt;`标签的`enctype="multipart/form-...

    extjs+commons-fileupload.jar 实现文件上传

    4. **临时存储**:配置FileUpload解析器以指定临时文件存储的位置,例如`/tmp`目录。 5. **文件保存**:从解析后的数据中,提取每个文件并将其保存到服务器的预定位置。可以设置自定义的文件名和路径策略。 6. **...

    commons-fileupload-1.3.2 commons-io-2.5 Servelet文件上传jar包

    - **流程**:用户提交包含文件的表单,Servlet接收到请求后,通过FileUpload解析请求正文,然后将文件数据保存到服务器,通常以临时文件形式。 4. **实现步骤**: - **创建Servlet**:定义一个Servlet,重写`...

    jsp多附件上传commons-fileupload-1.1.jar

    3. **处理文件上传**:在`UploadServlet`中,使用Apache Commons FileUpload解析请求并处理文件。首先,检查请求是否包含文件数据,然后创建一个DiskFileItemFactory实例,配置临时存储位置。接着,创建...

Global site tag (gtag.js) - Google Analytics