java中使用Struts 2框架上传文件代码

HTML表单默认值:


 代码如下 复制代码
<form action="" enctype="application/x-www-form-urlencoded" method="get">      ...</form>

要使用HTML表单上传文件,需要将HTML表单的enctype属性设置为"multipart/form-data",还需要将表单的method属性设置为"post"


 代码如下 复制代码
<form action="" enctype="multipart/form-data" method="post">        ...</form>

为了能使用户能够选择文件上传,表单中至少应该提供一个<input type="file">字段:


 代码如下 复制代码
<form action="multi_upload.action" enctype="multipart/form-data" method="post" id="uploadForm">     Choose a file to Upload:<input type="file" name="file"/><br /><input type="submit" value="submit"/></form>

在浏览器显示的效果:



使用Struts 2框架上传文件的准备工作  

第一步、在JSP页面中使用Struts 2标签库中的file标签,给它取一个容易理解的名字,若要上传多个文件就必须使用多个file标签,但它们的名字必须相同:


 代码如下 复制代码
<s:form action="multi_upload" method="post" enctype="multipart/form-data"><s:file name="attachment" label="Attachment 1"/><s:file name="attachment" label="Attachment 2"/><s:file name="attachment" label="Attachment 3"/><s:submit value="submit"/></s:form>

Struts 2的file标签,在浏览器中会被映射为<input type="file" name="attachment">。

第二步、创建接收上传文件信息的动作类。该动作类被约定为必须带有3个属性,并且这三个属性的命名必须符合是下面的规定

  •  [inputName]File
  •  [inputName]FileName
  •  [inputName]ContentType

这里的[inputName]是表单上file标签的名字,例如,file标签的name="attachment",你的这三个属性的名字必须命名为attachmentFile、attachmentFileName和attachmentContentType。

若只是上传单个文件,则[inputName]File属性的类型为 Java.io.File,它代表的是上传的文件,第二个和第三个属性都为String类型,他们分别代表被上传文件的文件名和内容类型。若要上传多个文件,则可以使用数组或Java.util.List。


 代码如下 复制代码

private File[] attachmentFile;private String[] attachmentFileName;private String[] attachmentContentType;

private List<File> attachmentFile;private List<String> attachmentFileName;private List<String> attachmentContentType;

第三步、将上传的文件保存到一个指定的文件夹下或数据库中。



示例:Struts 2单文件上传

接收上传文件的动作类:


 代码如下 复制代码

public class SingleFileUploadAction extends ActionSupport{private static final long    serialVersionUID    = 742220866388022377L;

private File                 attachment;                                // 用户上传的文件    private String               attachmentFileName;                        // 上传文件的文件名    private String               attachmentContentType;                     // 上传文件的类型    private String               description;                               // 用户的描述

/*     * SingleFileUploadAction的属性的getter和setter方法*/public File getAttachment()    {return attachment;    }

public void setAttachment(File attachment)    {this.attachment = attachment;    }

public String getAttachmentFileName()    {return attachmentFileName;    }

public void setAttachmentFileName(String attachmentFileName)    {this.attachmentFileName = attachmentFileName;    }

public String getAttachmentContentType()    {return attachmentContentType;    }

public void setAttachmentContentType(String attachmentContentType)    {this.attachmentContentType = attachmentContentType;    }

public String getDescription()    {return description;    }

public void setDescription(String description)    {this.description = description;    }

public String execute() throws Exception    {if (attachment != null)        {            String dataDir = "d:\images";// 上传文件存放的目录            File savedFile = new File(dataDir, attachmentFileName);// 上传文件在服务器具体的位置            attachment.renameTo(savedFile);// 将上传文件从临时文件复制到指定文件        }else        {return INPUT;        }

return SUCCESS;    }}

上传文件的表单:

<s:form action="single_upload" method="post" enctype="multipart/form-data"><s:textfield name="description" label="description"></s:textfield><s:file name="attachment" label="Choose a File to Upload"></s:file><s:submit value="submit"></s:submit></s:form>

struts.xml的配置信息:


 代码如下 复制代码
<action name="single_upload" class="struts2.suxiaolei.fileupload.action.SingleFileUploadAction"><result name="success">/success_single_upload.jsp</result><result name="input">/single_upload.jsp</result>

<interceptor-ref name="defaultStack"><param name="fileUpload.maximumSize">100000</param><param name="fileUpload.allowedTypesSet">image/gif,image/jpeg,image/png</param></interceptor-ref></action>

测试:

浏览器输入http://localhost:8081/Struts2/single_upload.jsp,得到如下页面:

填写信息和选择一个需要上传的文件

点击"submit"按钮上传文件,查看D盘下images文件夹下的文件:

 上传单个文件成功!



示例:动态多文件上传

创建HTML表单


 代码如下 复制代码

<form action="multi_upload.action" enctype="multipart/form-data" method="post"><table><tr><td>                Choose a file to Upload:</td><td id="more"><input type="file" name="file"/><input type="button" value="Add More..."onclick="addMore();"/></td></tr>

<tr><td></td><td><input type="submit" value="submit"/></td></tr></table></form>

创建JavaScript代码,使表单能动态增减上传文件的个数

<script type="text/javascript">

function addMore()    {var td = document.getElementById("more");//获取id="more"的元素,该元素用于容纳动态增减的上传文件元素

var br = document.createElement("br");//创建<br />元素        var input = document.createElement("input");//创建<input>元素,设置该元素的属性为<input type="file" name="file" />,用于选择上传的文件        var button = document.createElement("input");//创建<input>元素,设置该元素的属性为<input type="button" value="remove" />,用于移除上传标签

input.type = "file";        input.name = "file";

button.type = "button";        button.value = "remove";

//移除上传标签        button.onclick = function()        {            td.removeChild(br);            td.removeChild(input);            td.removeChild(button);        };

/*         * 添加上传标签*/        td.appendChild(br);        td.appendChild(input);        td.appendChild(button);    }

</script>

接收多个上传文件的动作类:

public class MultiFileUploadAction extends ActionSupport{private static final long    serialVersionUID    = -5056971793538814980L;

private List<File>           fileFile;private List<String>         fileFileName;private List<String>         fileContentType;

public List<File> getFileFile()    {return fileFile;    }

public void setFileFile(List<File> fileFile)    {this.fileFile = fileFile;    }

public List<String> getFileFileName()    {return fileFileName;    }

public void setFileFileName(List<String> fileFileName)    {this.fileFileName = fileFileName;    }

public List<String> getFileContentType()    {return fileContentType;    }

public void setFileContentType(List<String> fileContentType)    {this.fileContentType = fileContentType;    }

@Overridepublic String execute()    {if (fileFile.size() == 0)        {return INPUT;        }else        {

for (int index = 0; index < fileFile.size(); index++)            {                String targetDir = "d:\images";                File savedFile = new File(targetDir, fileFileName.get(index));                fileFile.get(index).renameTo(savedFile);            }        }

return SUCCESS;    }

}

struts.xml配置信息:

<action name="multi_upload" class="struts2.suxiaolei.fileupload.action.MultiFileUploadAction"><result name="success">/success_multi_upload.jsp</result><result name="input">/multi_upload.jsp</result>

<interceptor-ref name="defaultStack"><param name="fileUpload.maximumSize">100000</param><param name="fileUpload.allowedTypesSet">image/gif,image/jpeg,image/png</param></interceptor-ref></action>

success_multi_upload.jsp:

<s:property value="fileFileName"/> Upload Successfully!

测试:

浏览器中输入:http://localhost:8081/Struts2/multi_upload.jsp,获得如下界面:

点击"Add More..."按钮,我们要上传10个文件:

可以看到现在页面动态的增加了上传文件的个数,我们还可以点击"remove"按钮动态减少上传文件的个数,下面选择上传文件:

点击"submit"按钮上传文件:

查看D盘下images文件夹:

可以看到我们选择的文件都上传成功了!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 浏览器
, 标签
, 代码
, this
属性
java struts2框架、java struts框架、java struts框架教程、java struts2框架搭建、struts2框架 代码,以便于您获取更多的相关知识。

时间: 2024-08-19 21:18:33

java中使用Struts 2框架上传文件代码的相关文章

perl 中怎么实现sftp下载上传文件

问题描述 perl 中怎么实现sftp下载上传文件 在ftp/telnet禁用的情况下,如何使用sftp从远程主机上下载文件,并上传文件,求源码例子解释,谢谢

php curl 上传文件代码实例

  这篇文章主要介绍了php curl 上传文件代码实例,本文给出了两种实现方法,并分别给出了实现代码,需要的朋友可以参考下 假设server端上传文件处理脚本upload.php: 代码如下: print_r($_POST); print_r($_FILES); 1.使用 CURL 默认的方法 复制代码 代码如下: //如果php文件是utf8编码,系统是GBK编码,那么就需要转下编码,要不然Php在系统中找不到这个文件 $file = realpath(mb_convert_encoding

UpdatePanel上使用FileUpload上传文件代码

updatepanel上使用fileupload上传文件代码 @page language="c#" masterpagefile="~/evamanager.master" autoeventwireup="true" codefile="hv_excel.asp教程x.cs" inherits="hv_excel" title="untitled page" %> <as

php上传文件代码

原文地址:php上传文件代码作者:风云之士  function Upload($uploaddir)      {         $tmp_name =$_FILES['file']['tmp_name'];  // 文件上传后得临时文件名          $name     =$_FILES['file']['name'];     // 被上传文件的名称         $size     =$_FILES['file']['size'];    //  被上传文件的大小        

Asp.net MVC中使用JQuery插件ajaxFileUpload上传文件_实用技巧

0 ajaxFileUpload简介  ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比较多,我把我自己使用的ajaxFileUpload文件上传到博客园上了,想要使用的朋友可以下载:http://xiazai.jb51.net/201611/yuanma/ajaxfileupload(jb51.net).rar.  整个插件源码不到200行,实现非常简单,大致原理就是通过js动态创

【java】利用servlet解析报文,上传文件

由于工作需要,需要做一个excel导入的功能,这就需要上传excel文件到服务器,服务器做逻辑判断此文件是否是excel文件,接着利用poi的api就可以将内容转化为利用jdbc插入到数据库,达到批量数据导入的功能. 废话不多说,这其中上传文件有两种实现方式,一种是直接接到输入流,解析这个输入流,将里面的报文数据剔除,将剩下的文件写入到文件流,放到服务器上,这个是很早之前的解决思路,我们已经很少使用了,它不停的在操作数组,但是网上研究这个输入流的文章不多,写下来,没准对有兴趣的童鞋来说也是一件好

几种JSP上传文件代码(1/4)

JSP上传文件类 package com.vogoal.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java

PHP上传文件代码之入门代码

这是一种非常简单文件上传方式.基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制.  代码如下 复制代码 <!DOCTYPE html>       <html>       <head>       <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />       <meta http-equiv="Co

PHP+Ajax实现文件无刷新上传文件代码

PHP + jQuery Ajax文件上传实例.因为看到一些朋友询问如何实现PHP环境下的网页上传功能,自己这几天刚用了jQuery_upload_multiple上传插件,所以在这里把用法给大家说一下. 要实现基于这个插件的上传功能,其实挺简单,需要jquery就行了,另外还有一个上传文件时的PHP程序,费话不多说,先看下面的HTML,也就是带有上传表单,让用户选择上传文件的页面:    代码如下 复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML