struts2实现单个文件上传
2012-11-19 11:21
435 查看
第一步
框架的选择
在struts2-core-2.1.8.1.jar包里面 按照 org.apache.struts2 查询 找到default.porperties 默认的资源文件
看到关于上传文件的信息
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
struts.multipart.parser= 是选择哪种框架形式来上传文件
在这里struts.multipart.parser=jakarta 默认的是jakarta jakarta是Commo-FileUpload 的框架,所有要导入"commons-fileupload-1.2.1.jar"和"commons-io-1.3.2.jar"
如果改成struts.multipart.parser=cos 那就是用cos框架上传 只要导入cos.jar
想要改变struts.multipart.parser 的值 有两种方式
一是在struts2-core-2.1.8.1.jar中的default.porperties文件中去改
二是在struts.xml文件中加入<constant name="struts.multipart.paeser" value="cos"></constant> value的值就是你要选择上传的方式
需要的struts2的框架包(jar包)struts2-core-2.1.8.1.jar 一定要导入
根据你选择的文件上传的框架导入相应的jar包
第二步
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。
但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以
控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
第三步
写action 这个action继承BaseAction
//为了演示 只设一个
如果用cos框架的话
如果控制台有Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir 输出来 这是提示我们struts.multipart.saveDir没有设值
struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件或者struts.xml配置文件中
如果是struts.properties文件,则加入如下代码:struts.multipart.saveDir = /tmp/;或者是struts.xml配置文件,则增加如下代码:<constant name="struts.multipart.saveDir" value="/tmp"/>
-->
<!--
struts的默认上传文件大小为2M,设置上传文件的大小
<constant name="struts.multipart.maxSize" value="104857600"></constant>
-->
框架的选择
在struts2-core-2.1.8.1.jar包里面 按照 org.apache.struts2 查询 找到default.porperties 默认的资源文件
看到关于上传文件的信息
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
struts.multipart.parser= 是选择哪种框架形式来上传文件
在这里struts.multipart.parser=jakarta 默认的是jakarta jakarta是Commo-FileUpload 的框架,所有要导入"commons-fileupload-1.2.1.jar"和"commons-io-1.3.2.jar"
如果改成struts.multipart.parser=cos 那就是用cos框架上传 只要导入cos.jar
想要改变struts.multipart.parser 的值 有两种方式
一是在struts2-core-2.1.8.1.jar中的default.porperties文件中去改
二是在struts.xml文件中加入<constant name="struts.multipart.paeser" value="cos"></constant> value的值就是你要选择上传的方式
需要的struts2的框架包(jar包)struts2-core-2.1.8.1.jar 一定要导入
根据你选择的文件上传的框架导入相应的jar包
第二步
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <form action="stu.action" method="post" enctype="multipart/form-data"> <input name="image" type="file"/> <input type="submit" value="上传照片"/> </form>
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。
但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以
控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
第三步
写action 这个action继承BaseAction
//为了演示 只设一个
public class BaseAction{ public static final java.lang.String SUCCESS = "success"; } 这里使用jakarta的框架类型
package com.aciton; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; public class StudentsAction extends BaseAction { private File image; //文件内容 private String imageFileName; //文件名称 private String imageContentType; //文件类型 public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } public String execute(){ String path = ServletActionContext.getServletContext().getRealPath("/image"); System.out.println(path); if(image!=null){ File savefile = new File(new File(path),imageFileName); if(!savefile.getParentFile().exists()){ savefile.getParentFile().mkdirs(); } try { FileUtils.copyFile(image,savefile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String [] t = imageContentType.split("/"); for(String s : t){ System.out.println(s); } } return SUCCESS; } }
如果用cos框架的话
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { // myFile属性用来封装上传的文件 private File myFile; // myFileContentType属性用来封装上传文件的类型 private String myFileContentType; // myFileFileName属性用来封装上传文件的文件名 private String myFileFileName; //获得myFile值 public File getMyFile() { return myFile; } //设置myFile值 public void setMyFile(File myFile) { this.myFile = myFile; } //获得myFileContentType值 public String getMyFileContentType() { return myFileContentType; } //设置myFileContentType值 public void setMyFileContentType(String myFileContentType) { this.myFileContentType = myFileContentType; } //获得myFileFileName值 public String getMyFileFileName() { return myFileFileName; } //设置myFileFileName值 public void setMyFileFileName(String myFileFileName) { this.myFileFileName = myFileFileName; } public String execute() throws Exception { //基于myFile创建一个文件输入流 InputStream is = new FileInputStream(myFile); // 设置上传文件目录 String uploadPath = ServletActionContext.getServletContext() .getRealPath("/image"); // 设置目标文件 File toFile = new File(uploadPath, this.getMyFileFileName()); // 创建一个输出流 OutputStream os = new FileOutputStream(toFile); //设置缓存 byte[] buffer = new byte[1024]; int length = 0; //读取myFile文件输出到toFile文件中 while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } System.out.println("上传用户"+username); System.out.println("上传文件名"+myFileFileName); System.out.println("上传文件类型"+myFileContentType); //关闭输入流 is.close(); //关闭输出流 os.close(); return SUCCESS; } } 第四步 在struts.xml注册action <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd"> <struts> <package name="students" extends="struts-default"> <!-- 1:如果你整合了spring 那么class就写这个那个bean中的id名称,如果没有写,就写类的全名(com.action.StudentsAction)这是我的 2:如果这里你没有写method 那么你就要在form的action 写成stu!execute.action --> <action name="stu" method="execute" class="studentsAction"> <result name="success">upload.jsp</result> </action> </package> </struts><!--
如果控制台有Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir 输出来 这是提示我们struts.multipart.saveDir没有设值
struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件或者struts.xml配置文件中
如果是struts.properties文件,则加入如下代码:struts.multipart.saveDir = /tmp/;或者是struts.xml配置文件,则增加如下代码:<constant name="struts.multipart.saveDir" value="/tmp"/>
-->
<!--
struts的默认上传文件大小为2M,设置上传文件的大小
<constant name="struts.multipart.maxSize" value="104857600"></constant>
-->
相关文章推荐
- struts2文件上传(使用struts2自带上传方式实现单个文件上传)
- Struts2实现单个文件上传的示例
- struts2单个文件上传的两种实现方式
- Struts2:单个文件上传的两种实现方式
- Struts2实现上传单个文件功能
- struts2实现上传文件(单个、多个)
- struts2实现文件上传(单个、批量文件上传)
- struts2实现单个和多个文件的上传
- Struts2实现图片上传功能 (单个图片文件)
- Struts学习总结(五)---使用Struts2实现单个文件上传
- Android+struts2实现文件的上传
- Struts2(三)使用Struts2实现文件的上传和下载
- Struts2实现单文件上传
- Struts2实现文件上传和下载
- Struts2实现文件上传和下载
- ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)
- Java程序员从笨鸟到菜鸟之(七十一)细谈struts2(十三)struts2实现文件上传和下载详解
- Struts2-上传/下载文件功能实现
- Struts2和common的fileupload实现文件上传并显示实时进度
- struts2实现文件上传