2、前端表单
inputtypefile不上传文件form表单
提交⽅式:method=“post”(post传送的数据量⼤,可视为不受限制)
text/plain:将空格转换为+号,其它字符不做编码处理,适⽤于通过表单发送邮件。input输⼊框
类型:type=“file”
4、实现步骤
带 * 号的是⽤于完善业务的辅助功能,不是必要的。
1. 判断表单:是否包含⽂件上传控件。
2、前端页⾯
fileUpload.jsp
<form action="${tPath}/upload.do" method="post" enctype="multipart/form-data">
</form>
success.jsp
<h1>${msg}</h1>
// 判断表单项是否为上传⽂件
if (fileItem.isFormField()) { // 普通⽂本
String filedName = FieldName(); // 获取字段名:表单项name属性的值
String value = String("UTF-8"); // FileItem对象中保存的数据流内容:即表单项为普通⽂本的输⼊值 System.out.println(filedName + ":" + value);
} else { // 上传⽂件
// ------------------------1、处理⽂件------------------------
String uploadFileName = Name();// 上传⽂件名
System.out.println("上传的⽂件名:" + uploadFileName);
if (uploadFileName == null || im().equals("")) { // ⽂件名为空值或空
continue; // 进⼊下⼀轮循环,判断下⼀个FileItem对象
}
String fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1); // ⽂件后缀名
System.out.println("⽂件信息【⽂件名:" + uploadFileName + ",⽂件类型:" + fileExtName + "】");
// 使⽤UUID保证⽂件名唯⼀
String uuidPath = UUID.randomUUID().toString();
// ------------------------2、处理路径------------------------
// 存储路径:uploadPath
String realPath = uploadPath + '/' + uuidPath; // 真实存在的路径
// 给每个⽂件创建⼀个⽂件夹
File realPathFile = new File(realPath);
makeDirIfNotExist(realPathFile);
// ------------------------3、⽂件传输------------------------
// 获得输⼊流
InputStream is = InputStream();
// 获得输出流
FileOutputStream fos = new FileOutputStream(realPathFile + "/" + uploadFileName);
// 创建缓冲区
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
msg = "⽂件上传成功!";
fileItem.delete(); // 上传成功,清除临时⽂件
fos.close();
is.close();
}
}
return msg;
}
private ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {
/
/ ServletFileUpload servletFileUpload = new ServletFileUpload(factory); // 构造⽅法设置FileItemFactory
ServletFileUpload servletFileUpload = new ServletFileUpload();
servletFileUpload.setFileItemFactory(factory); // 设置FileItemFactory
// ------------------------辅助功能------------------------
// 监听⽂件上传进度
servletFileUpload.setProgressListener(new ProgressListener() {
/**
*
* @param pBytesRead 已读取的⽂件⼤⼩
* @param pContentLength ⽂件⼤⼩
5、运⾏结果
上传的⽂件会保存在Target⽬录下对应项⽬的保存路径下。
⾮临时⽂件:
保存在upload⽂件夹下。
每个⽂件存储在⼀个⼦⽂件夹中,⽂件夹名是随机⽣成的UUID。临时⽂件:
保存在upload⽂件夹下,同时在tmp⽂件夹下⽣成⼀个临时⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论