Struts2实现文件上传
2014-06-06 22:35
459 查看
在讲文件上传之前,我们先来看表单的enctype属性。
application/x-www-form-urlencoded:默认值,表单数据被编码为"名称/值",这是标准的编码方式。
multipart/form-data:上传二进制数据,只有使用multilpart/form-data,才能完整的传递数据,进行文件上传。
text/plain:表单数据以纯文本的形式进行编码,其中不含任何控件或格式字符。
Struts2使用的上传框架:Common-FileUpload => apache的开源项目,由jakarta项目组开发。
使用jar包:
1:commons-fileupload-XXX.jar(http://jakarta.apache.org/commons/fileupload/)
2:commons-io-XXX.jar(http://jakarta.apache.org/commons/io/)
项目演示:
upload.jsp:
UploadAction.java:
多文件上传:
upload.jsp:
UploadAction.java:
附加:上传文件的类型拦截
在struts.xml文件中拦截上传文件的类型:
在struts.xml文件中加入如下常量:
fileInput.jsp视图(这个标签的内容是通过系统注入的):
注:如果这仅仅这样配置的话,提示的是英文,所以要使用国际化:
1.在src目录下添加一个message.properties文件。
2.用视图add的方式添加属性: struts.messages.error.content.type.not.allowed(如图)
application/x-www-form-urlencoded:默认值,表单数据被编码为"名称/值",这是标准的编码方式。
multipart/form-data:上传二进制数据,只有使用multilpart/form-data,才能完整的传递数据,进行文件上传。
text/plain:表单数据以纯文本的形式进行编码,其中不含任何控件或格式字符。
Struts2使用的上传框架:Common-FileUpload => apache的开源项目,由jakarta项目组开发。
使用jar包:
1:commons-fileupload-XXX.jar(http://jakarta.apache.org/commons/fileupload/)
2:commons-io-XXX.jar(http://jakarta.apache.org/commons/io/)
项目演示:
upload.jsp:
<body> <form action="uploadAction_test.action" method="post" enctype="multipart/form-data"> 请选择文件:<input type="file" name="uploadFile"/> <input type="submit" value="提交"> </form> </body>注:在上传页面的form表单中必须加上属性:enctype="multipart/form-data"
UploadAction.java:
public class UploadAction { /* 定义上传文件 */ private File uploadFile; /* 定义上传文件的类型 【文件+ContentType不能省略和拼写错误】*/ private String uploadFileContentType; /* 定义上传文件的原始名称 【文件+FileName不能省略和拼写错误】*/ private String uploadFileFileName; public File getUploadFile() { return uploadFile; } public void setUploadFile(File uploadFile) { this.uploadFile = uploadFile; } public String getUploadFileContentType() { return uploadFileContentType; } public void setUploadFileContentType(String uploadFileContentType) { this.uploadFileContentType = uploadFileContentType; } public String getUploadFileFileName() { return uploadFileFileName; } public void setUploadFileFileName(String uploadFileFileName) { this.uploadFileFileName = uploadFileFileName; } /* 测试方法 */ public String test() throws IOException { /* 假设保存的虚拟路径为/upload,通过虚拟路径去获取绝对路径 */ String realPath = ServletActionContext.getRequest().getRealPath("/upload"); /* 构造文件路径 */ File file = new File(realPath); /* 如果不存在 */ if (!file.exists()) { file.mkdirs(); } /* 使用struts2的工具类进行上传,第二个参数是目标文件(我们通过文件加上文件名的方式进行构建) */ FileUtils.copyFile(uploadFile, new File(file, uploadFileFileName)); return "ok"; } }
多文件上传:
upload.jsp:
<body> <form action="uploadAction_test.action" method="post" enctype="multipart/form-data"> 请选择文件:<input type="file" name="uploadFiles"/></br> <input type="file" name="uploadFiles"/></br> <input type="submit" value="提交"> </form> </body>
UploadAction.java:
public class UploadAction { /* 定义上传文件 */ private File[] uploadFiles; /* 定义上传文件的类型 【文件+ContentType不能省略和拼写错误】 */ private String[] uploadFilesContentType; /* 定义上传文件的原始名称 【文件+FileName不能省略和拼写错误】 */ private String[] uploadFilesFileName; public File[] getUploadFiles() { return uploadFiles; } public void setUploadFiles(File[] uploadFiles) { this.uploadFiles = uploadFiles; } public String[] getUploadFilesContentType() { return uploadFilesContentType; } public void setUploadFilesContentType(String[] uploadFilesContentType) { this.uploadFilesContentType = uploadFilesContentType; } public String[] getUploadFilesFileName() { return uploadFilesFileName; } public void setUploadFilesFileName(String[] uploadFilesFileName) { this.uploadFilesFileName = uploadFilesFileName; } /* 测试方法 */ public String test() throws IOException { /* 假设保存的虚拟路径为/upload,通过虚拟路径去获取绝对路径 */ String realPath = ServletActionContext.getRequest().getRealPath("/upload"); /* 构造文件路径 */ File file = new File(realPath); /* 如果不存在 */ if (!file.exists()) { file.mkdirs(); } /* 遍历所有上传的文件 */ for (int i = 0; i < uploadFiles.length; i++) { /* 获取文件 */ File uploadFile = uploadFiles[i]; /* 上传 */ FileUtils.copyFile(uploadFile, new File(file, uploadFilesFileName[i])); } return "ok"; } }
附加:上传文件的类型拦截
在struts.xml文件中拦截上传文件的类型:
<action name="uploadAction_*" class="com.lixue.web.action.UploadAction" method="{1}"> <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedTypes"><!-- fileUpload.allowedTypes为固定写法 --> image/png,image/jpeg </param> </interceptor-ref> <result name="ok">/uploadOK.jsp</result> <result name="input">/fileInput.jsp</result><!-- 当文件类型不支持时,系统默认转发到input视图 --> </action>
在struts.xml文件中加入如下常量:
<!-- 国际化文件(message是我们自定义的属性文件的文件名) --> <constant name="struts.custom.i18n.resources" value="message" />
fileInput.jsp视图(这个标签的内容是通过系统注入的):
<body> <s:fielderror></s:fielderror> </body>
注:如果这仅仅这样配置的话,提示的是英文,所以要使用国际化:
1.在src目录下添加一个message.properties文件。
2.用视图add的方式添加属性: struts.messages.error.content.type.not.allowed(如图)
相关文章推荐
- 【SSI开发总结.8】Struts2中实现文件上传功能
- struts2实现文件的上传
- 用Struts2更好的实现文件的上传、下载功能以及解决中文名称问题
- Struts2下使用Common-FileUpload实现文件上传
- struts2实现文件上传(一)
- Struts2实现文件上传
- 在Struts2中实现文件上传
- 在Struts2中实现文件上传
- Ext.ux.UploadDialog 整合 Struts2 实现多文件上传
- struts2实现文件上传源码
- Ext2.1 + Struts2 实现简单的文件上传
- Applet结合Struts2实现文件上传 推荐
- Struts2的文件上传-实现原理
- 基于struts2实现文件上传功能
- 【转】用Struts2实现文件上传时显示进度条功能
- Struts2通过commons-fileupload实现文件上传
- Struts2通过commons-fileupload实现文件上传
- struts2 实现多文件限制上传
- struts2实现文件上传(验证过!)
- Struts2实现多文件上传