TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
在上传文件时,struts2会将文件保存后放到临时文件夹中,然后把路径设置到File属性上。在Action中直接饮用即可。注意该文件只是临时的,上传结束后Struts2会将文件删除,因为UploadAction中需要将该文件复制出来。该临时文件的名称也不是上传文件的原名称,而是Struts2根据时间戳随机生成的,后缀为“.tmp”,目的是保证临时文件名不会有重复。
如果要或得该文件的原始名称,还需要定义一个String类型的属性,属性名必须为xxxFileName,其中xxx为File属性的名称(即本例中的picture)。Struts会将源文件名设置到该属性上。例如UploadAction中的pictureFileName属性。
如果要获取该文件的原始MIME类型,需要定义一个String类型的属性,属性名必须为xxxContentType,其中xxx也为File属性的名称(即本例中的picture)。struts会将源文件的MIME类型设置到该属性上。比如UploadAction中的pictureContentType。
[color=#990066,strength=3);]UploadAction.java
public class UploadAction extends ActionSupport {
private File picture; //上传的文件。Struts会将文件封装为File对象
private String pictureContentType; //文件类型。Struts 2 会将文件类型设置到该变量
private String pictureFileName; //文件名称。Struts会将文件名称设置到该变量
public String execute(){
return "input";
}
public String upload() throws Exception{
File saved = new File(ServletActionContext.getServletContext().getRealPath("upload"),pictureFileName); //最终文件保存到/upload下
InputStream ins = null; //文件输出流
OutputStream ous = null; //文件输出流
try{
saved.getParentFile().mkdirs(); //确保文件夹/upload存在
ins = new FileInputStream(picture); //读入临时文件
ous = new FileOutputStream(saved); //写入到upload下
byte[] b = new byte[1024]; //字节缓存
int len = 0;
while((len = ins.read(b)) != -1){ //循环读入,直接结束SS
ous.write(b,0,len); //写入文件
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(ous != null) ous.close();
if(ins != null) ins.close();
}
return "list";
}
public File getPicture() {
return picture;
}
public void setPicture(File picture) {
this.picture = picture;
}
public String getPictureContentType() {
return pictureContentType;
}
public void setPictureContentType(String pictureContentType) {
this.pictureContentType = pictureContentType;
}
public String getPictureFileName() {
return pictureFileName;
}
public void setPictureFileName(String pictureFileName) {
this.pictureFileName = pictureFileName;
}
}
上传文件的JSP表单:
[color=#990066,strength=3);]upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %>
<HTML>
<body>
<struts:actionerror/> <!-- 显示错误信息 -->
<struts:form action="upload" enctype="multipart/form-data" method="post" validate="true">
<struts:label value="上传文件"></struts:label> <!-- 标签 -->
<struts:file name="picture" label="文件一"></struts:file> <!-- 文件域 -->
<struts:submit value=" 开始上传 " method="upload"></struts:submit> <!-- 上传按钮 -->
</struts:form>
</body>
</html>
上传成功的页面代码如下:
[color=#990066,strength=3);]uploadList.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %>
<html>
<body>
文件已经保存到:
<a href="upload/<struts:property value="pictureFileName"/>" target=_blank><struts:property value="pictureFileName"/></a><br/><br/>
<<<a href="upload.action">继续上传</a>
</body>
</html>
Action配置为:
[color=#990066,strength=3);]struts.xml­
<action name="upload" class="com.zhangjie.struts2.action.UploadAction">
<interceptor-ref name="fileUpload"> <!-- 文件上传参数设置 -->
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param> <!-- 允许上传的类型 -->
<param name="maximumSize">20480</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/> <!-- 默认的拦截器堆栈 -->
<result name="input">/upload.jsp</result>
<result name="list">/uploadList.jsp</result>
</action>
注:其中allowedTypes为允许上传的MIME类型,maximumSize­设置上传的允许大小,不能大于2097152字节
错误信息设置:
­#自定义的资源文件
struts.custom.il8n.resources
com.zhangjie.struts2.resources.Resources
struts.multipart.saveDir = /temp
struts.multipart.maxSize = 10000000
运行效果如下:
­[color=#990066,strength=3);]
[color=#990066,strength=3);][color=#990066,strength=3);][color=#990066,strength=3);]
|
|