struts文件上传详解
来源:互联网 发布:淘宝如何判定虚假交易 编辑:程序博客网 时间:2024/06/08 15:23
第一步:添加配置文件
在struts.xml文件中添加如下内容:
<constant name="struts.multipart.saveDir" value="/tmp"/> --------------》这个用于存放临时文件
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.base.wrapper.RequestParseWrapper" -----------》这个类没有实际作用,见第二步
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />
第二步:创建RequestParseWrapper类
这个类对应struts.xml文件 ,在com.base.wrapper包下(包按自己需求创建)创建该类就行了,不需要在该类中做任何操作
public class RequestParseWrapper extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException
{
}
}
第三步:创建文件上传实体类
创建文件上传实体类
简单介绍该类:该类根据自己的业务需要,在指定的文件夹(根目录)下,把每天上传的重新命名的文件放在单独的文件夹(文件夹的名字是今天的日期yyyymmdd)下,
其中可能涉及自己写的一些工具方法,这些方法主要是关于文件路径创建的,可以跳过,但不影响文章的阅读。该类把上传文件的原来的名字和处理后的名字封装
成了该类的属性,方便使用。该类完全支持多文件上传,但需要把该类的属性改成list集合,具体操作,你懂得
public class FileUploadModel {
@SuppressWarnings("unchecked")
public void fileUpload() throws Exception{
try {
//获取文件的跟路径
String uploadDir = ResourceConfig.getSysUploadWebPath();
//前缀 文件夹
String prefix = TimeUtil.nowDate();
//存放文件的临时文件夹
String tempDir = uploadDir + prefix +"\\";
File fileDir = new File(tempDir);
if(!fileDir.exists()){
fileDir.mkdir();
}
// 磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M 达到1M后flush
factory.setSizeThreshold(1024 * 1024);
// repository 贮藏室,即临时文件目录
factory.setRepository(new File(tempDir));
//文件上传核心类
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置允许上传的最大文件大小 20M
upload.setSizeMax(20 * 1024 * 1024);
HttpServletRequest request = ServletActionContext.getRequest();
// 解析HTTP请求消息头
List<FileItem> fileItems = upload.parseRequest(request);
log.info("length:"+fileItems.size());
Iterator<FileItem> iter = fileItems.iterator();
while(iter.hasNext()) {
FileItem item = (FileItem)iter.next();
if(!item.isFormField()) {
log.info("处理上传的文件 ...");
// 此时的文件名包含了完整的路径,得注意加工一下
filename = item.getName();
//上传文件的大小
long fileSize = item.getSize();
if("".equals(filename) && fileSize == 0){
log.info("获取文件名失败,文件名为空...");
return;
}else if (fileSize > 20 * 1024 * 1024){
// 如果上传的软件超过20M
log.info("文件保存失败,上传文件过大,请控制在20M以内");
return;
}
log.info("完整的文件名:" + filename);
//文件名
String suffix = TimeUtil.now() + "_" + RandomUtil.randomAlphabetic(4);
// 文件扩展名
String nameExt = "";
// 获取扩展名即获取文件的格式
nameExt = FileNameUtil.getNameExt(item.getName());;
//处理后的完整的文件名
String tmpPath = tempDir + suffix + "." + nameExt;
proFileName = proFileName+prefix +"\\"+ suffix + "." + nameExt;
File uploadFile = new File(tmpPath);
if(!uploadFile.exists()){
uploadFile.createNewFile();
}
//将上传的文件写到指定的文件中
item.write(uploadFile);
log.info("文件保存完毕");
}else{
String name = item.getFieldName();
String value = item.getString();
log.info("表单....."+name+"="+value);
}
}
} catch (Exception e) {
log.info("上传文件发生异常 ...");
e.printStackTrace();
throw e;
}
}
//日志跟踪
private Logger log = Logger.getLogger(FileUploadModel.class);
//处理后的完整的文件名
private String proFileName = "\\";
//上传文件的完整文件名
private String filename = "";
get/set方法............
}
第四步:调用上传类
在需求的action对应的方法中调用FileUploadModel upload = new FileUploadModel();
upload.fileUpload();
String fileName = upload.getFilename();//文件原来的名字
String proFileName = upload.getProFileName();//文件处理后的完整路径和名字
第五步:jsp文件的处理
<form name="" action="" method="post" enctype="multipart/form-data" target="targetFrame"> <input type="file" name="abcc"> ------->name一定要有值
</form>
<iframe name="targetFrame" style="width:0%;display: none;;"></iframe> ----------->可以理解为伪ajax异步刷新
- struts文件上传详解
- struts文件上传详解
- 通过Struts实现文件上传详解
- Java Struts文件上传和下载详解
- Java Struts文件上传和下载详解
- Struts的文件上传
- struts文件上传要点
- Struts的文件上传
- struts文件上传要点
- Struts的文件上传
- Struts的文件上传
- Struts的文件上传
- Struts上传文件笔记
- Struts文件上传
- Struts的文件上传
- 上传文件(struts篇)
- Struts的文件上传
- struts 多文件上传
- CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置
- 使用 Spring 2.5 注释驱动的 IoC 功能
- 为啥苹果鼠标反人类? 一周外设要闻回顾
- Memcached源码分析之状态机(二)
- python 学习笔记
- struts文件上传详解
- Java字符串之性能提升
- 链表建立,插入,删除,输出,释放
- 用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,
- CentOS 6.5 yum安装配置lnmp服务器
- 配合tomcat jvm参数以便Jconsole或者jvisualvm对jvm进行监控
- 二叉树
- 编程之美读书心得
- git学习二(基本命令,commit、rm、log)