关于Struts2 上传文件获取文件名称和类型(标准做法)

版权声明:https://blog.csdn.net/aiyowodetian https://blog.csdn.net/aiyowodetian/article/details/10097355

之前在做struts2 文件上传的时候 遇到个问题,就是如何获取传文件的文件名称和类型, 于是在网上查了下,发现有很多朋友也有相同的疑问

然后再这里给大家分享一下关于struts2 上传文件的一些算是知识点吧!

struts2 在做文件上传的时候做的是非常好的, 我简单举个例子:

我这有张表单

<form action="uploadfile.action" id="myform" name="myform" method="post" enctype="multipart/form-data">
<input type="text" id="loginid" name="loginid" />
<input type="file" id="headimg" name="headimg" />
</form>


这张表单有两个表单元素一个是 用户loginid  这个是文本类型的元素

另外一个是 headimg 这个是文件域 这个表单要提交的信息有 用户的账号 和头像图片

表单请求的 uploadfile.action 这个是我们在struts.xml 做的映射 映射到的java处理类

<action name="uploadfile" class="com.action.UploadFileAction" ></action>


那么在这个com.action.UploadFileAction类 里面 我们应该如何去处理 loginid 和 headimg 这两个提交过来的数据呢

package com.action;

import java.io.File;

import org.apache.commons.io.FileUtils;

public class UploadFileAction {
	private String loginid;
	private File headimg;
	private String headimgFileName;
	private String headimgContentType;
	
	public void execute(){
		System.out.println(loginid);
		System.out.println(headimg);
		System.out.println(headimgFileName);
		System.out.println(headimgContentType);
		if(headimg!=null){
			try {
				FileUtils.copyFile(headimg, new File("F://imgs/"+headimgFileName));//这里将上传的文件拷贝到你要保存的目录下面
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}

	public String getLoginid() {
		return loginid;
	}

	public void setLoginid(String loginid) {
		this.loginid = loginid;
	}

	public File getHeadimg() {
		return headimg;
	}

	public void setHeadimg(File headimg) {
		this.headimg = headimg;
	}

	public String getHeadimgFileName() {
		return headimgFileName;
	}

	public void setHeadimgFileName(String headimgFileName) {
		this.headimgFileName = headimgFileName;
	}

	public String getHeadimgContentType() {
		return headimgContentType;
	}

	public void setHeadimgContentType(String headimgContentType) {
		this.headimgContentType = headimgContentType;
	}
	
}


正如你看到的, 在action 里面除了 loginid 和 headimg 这两个私有变量以外 还有 headimgFileName 和 headimgContentType

这个headimg 是java.io.File类型的 如果你直接用headimg.getFileName()  的话 你得到的会是”1372342342.tmp“ 有时间戳的临时文件 , 如果想要 获取你上传的文件的名字的话 就得通过

增加一个headimgFileName  变量了 这个变量的名字 等于 文件域<input type="file" name="headimg" /> 这个元素的名字(headimg) + FileName

这样的话获取到的文件名称才是你上传上来的文件的真是名称 如 : “zhangsan.jpg” 这里的名称 是不会带路径的 然后

headimgContentType 也是一样 你如果上传的是.txt 的话那么得到的会是text/plan    .js 的话得到的会是 text/javascript  等等

因为struts2 在做文件上传的时候 会先经过他自身的 filter 进行处理 想要知道filter的更详细处理过程的话 自己可以百度一下

由于struts2 在做上传文件的时候为我们考虑了很多,包括 上传文件的缓冲区大小 以及临时文件的存放目录等等问题(缓冲区大小和临时文件目录在struts.xml 中自行配置),所以我们在做上传文件的时候需要操作的东西就很很少而且简单明了

只需要指定变量名称去做接收就可以了!希望对大家有帮助~!

 

 

转载请注明出处!

展开阅读全文

没有更多推荐了,返回首页