Struts2文件上传
2015-12-23 13:27
387 查看
Struts 2和 Struts 1一样,文件上传都是封装了Apache的Common-fileupload方法,下面我一步步带大家实现上传。
注意:
页面整体的pageEncoding=“UTF-8”;
文件上传enctype="multipart/form-data"。enctype这个属性管理的是表单的MIME编码,共有三个值可选:
1、application/x-www-form-urlencoded
2、multipart/form-data
3、text/plain
其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。在html的form表单里默认就是这种传输编码类型。
而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或是是mp3等等。
text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型,否则会出现接收时编码混乱的问题。
MIME,它的英文全称是"MultipurposeInternet Mail Extensions" 多功能Internet邮件扩充服务,它是一种多用途网际邮件扩充协议。简单说,它就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
很简单就实现了,那么如果是多文件同时上传呢?
一、环境搭建
建立java web项目,引入jar包,放在WEB-INF/lib下。下载地址:Struts2上传文件的jar包下载地址 。Web.xml配置文件,不要忘记配置Struts2过滤器<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
二、页面表单
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>struts2文件上传例子</title> </head> <body> <form action="upload.action" method="post" enctype="multipart/form-data"> 标题:<input type="text" name="title"><br> 文件:<input type="file" name="myFile"><br> <input type="submit" value="提交上传"> </form> </body> </html>
注意:
页面整体的pageEncoding=“UTF-8”;
文件上传enctype="multipart/form-data"。enctype这个属性管理的是表单的MIME编码,共有三个值可选:
1、application/x-www-form-urlencoded
2、multipart/form-data
3、text/plain
其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。在html的form表单里默认就是这种传输编码类型。
而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或是是mp3等等。
text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型,否则会出现接收时编码混乱的问题。
MIME,它的英文全称是"MultipurposeInternet Mail Extensions" 多功能Internet邮件扩充服务,它是一种多用途网际邮件扩充协议。简单说,它就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
三、Action(UploadAction)
package com.xx.struts2; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import com.opensymphony.xwork2.Action; public class UploadAction { private String title; // 可以得到上传文件的名称 // 规则:输入域的名称+固定字符串FileName private String myFileFileName; // 取得文件数据 // 规则:File 输入域的名称 private File myFile; // 取得内容类型 // 规则:输入域的名称+固定字符串ContentType // private String myFileContentType; public String getMyFileFileName() { return myFileFileName; } public void setMyFileFileName(String myFileFileName) { this.myFileFileName = myFileFileName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public File getMyFile() { return myFile; } public void setMyFile(File myFile) { this.myFile = myFile; } public String execute() throws Exception { InputStream is = null; OutputStream os = null; try { is = new BufferedInputStream(new FileInputStream(myFile)); os = new BufferedOutputStream(new FileOutputStream("f:\\" + myFileFileName)); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) > 0) { os.write(buffer, 0, len); } } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } } return Action.SUCCESS; } }
四、Struts.xml配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 当struts.xml配置文件发生修改,会立刻加载,在生产环境下最好不要配置 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 会提供更加友好的提示信息 --> <constant name="struts.devMode" value="true" /> <!-- 需要继承struts-default包,这样就拥有的最基本的功能 --> <package name="upload-package" extends="struts-default"> <action name="upload" class="com.xx.struts2.UploadAction"> <result name="success">/upload_success.jsp</result> </action> </package> </struts>
很简单就实现了,那么如果是多文件同时上传呢?
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树