package dao;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 定义允许上传的文件扩展名
private String Ext_Name = "gif,jpg,jpeg,png,bmp,swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb,doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 得到上传文件的保存目录,将上传文件存放在WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
String path="WEB-INF/upload";
String savePath = this.getServletContext().getRealPath(path);
File saveFileDir = new File(savePath);
if (!saveFileDir.exists()) {
// 创建临时目录
saveFileDir.mkdirs();
}
// 上传时生成临时文件保存目录
String tmpPath = this.getServletContext().getRealPath("WEB-INF/tem");
File tmpFile = new File(tmpPath);
if (!tmpFile.exists()) {
// 创建临时目录
tmpFile.mkdirs();
}
// 消息提示
String message = "";
try {
// 使用Apache文件上传组件处理文件上传步骤:
// 1.创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中
factory.setSizeThreshold(1024 * 10);// 设置缓冲区的大小为100KB,如果不指定,那么默认缓冲区的大小是10KB
// 设置上传时生成的临时文件的保存目录
factory.setRepository(tmpFile);
// 2.创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 监听文件上传进度
upload.setProgressListener(new ProgressListener() {
@Override
public void update(long readedBytes, long totalBytes, int currentItem) {
// TODO Auto-generated method stub
System.out.println("当前已处理:" + readedBytes + "-----------文件大小为:" + totalBytes + "--" + currentItem);
}
});
// 解决上传文件名的中文乱码问题
upload.setHeaderEncoding("UTF-8");
// 3.判断提交上来的数据是否是上传表单的数据
if (!ServletFileUpload.isMultipartContent(request)) {
// 按照传统方式获取数据
return;
}
// 设置上传单个文件的最大值
upload.setFileSizeMax(1024 * 1024 * 3);// 3M
// 设置上传文件总量的最大值,就是本次上传的所有文件的总和的最大值
upload.setSizeMax(1024 * 1024 * 100);// 100M
List<?> items = upload.parseRequest(request);
Iterator<?> itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
// 如果fileitem中封装的是普通的输入想数据
if (item.isFormField()) {
String name = item.getFieldName();
// 解决普通输入项数据中文乱码问题
String value = item.getString("UTF-8");
// value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
} else// 如果fileitem中封装的是上传文件
{
// 得到上传文件的文件名
String fileName = item.getName();
System.out.println("文件名:" + fileName);
System.out.println("上传路径:" + savePath);
if (fileName == null && fileName.trim().length() == 0) {
continue;
}
// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的
// 如: C:\Users\H__D\Desktop\1.txt 而有些则是 : 1.txt
// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
// 得到上传文件的扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
// 检查扩展名
// 如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
System.out.println("上传的文件的扩展名是:" + fileExt);
if(!Ext_Name.contains(fileExt)){
System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt);
message = message + "文件:" + fileName + ",上传文件扩展名是不允许的扩展名:" + fileExt + "<br/>";
break;
}
// 检查文件大小
if(item.getSize() == 0) continue;
if(item.getSize() > 1024 * 1024 * 1){
System.out.println("上传文件大小:" + item.getSize());
message = message + "文件:" + fileName + ",上传文件大小超过限制大小:" + upload.getFileSizeMax() + "<br/>";
break;
}
// 得到存文件的文件名
String saveFileName = makeFileName(fileName);
//保存文件方法一// 获取item中的上传文件的输入流
InputStream is = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "\\" + saveFileName);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标致
int len = 0;
while((len = is.read(buffer)) > 0){
out.write(buffer, 0, len);
}
//关闭输出流
out.close();
//关闭输入流
is.close();
//删除临时文件
item.delete();
message = message + "文件:"
没有合适的资源?快使用搜索试试~ 我知道了~
基于Javaweb的用户管理系统
共54个文件
jsp:15个
class:10个
java:9个
4星 · 超过85%的资源 需积分: 46 58 下载量 158 浏览量
2018-02-09
12:53:30
上传
评论 3
收藏 7.09MB ZIP 举报
温馨提示
自己编写的基于javaweb用户管理系统,还有些不足,但对于初学者来说,已经足够了,仅供参考,练习作者可加
资源推荐
资源详情
资源评论
收起资源包目录
基于Java Web的用户管理系统.zip (54个子文件)
基于Java Web的用户管理系统
.project 935B
.settings
.jsdtscope 567B
org.eclipse.core.resources.prefs 71B
org.eclipse.wst.common.component 557B
org.eclipse.jdt.core.prefs 364B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
src
dao
LoadSuc.java 3KB
UploadServlet.java 9KB
ListFileServlet.java 3KB
Users.java 865B
UserDAO.java 6KB
DownloadServlet.java 3KB
VisitorCounter.java 4KB
business
DoInsert.java 3KB
DoDelete.java 2KB
build
classes
dao
UploadServlet.class 7KB
LoadSuc.class 3KB
Users.class 1KB
ListFileServlet.class 3KB
VisitorCounter.class 4KB
DownloadServlet.class 3KB
UserDAO.class 6KB
UploadServlet$1.class 1KB
business
DoDelete.class 2KB
DoInsert.class 3KB
WebContent
message.jsp 318B
Loadfail.jsp 1KB
WEB-INF
web.xml 2KB
upload
lib
commons-fileupload-1.3.3.jar 69KB
taglibs-standard-impl-1.2.5.jar 202KB
commons-io-2.6.jar 210KB
jstl.jar 23KB
mysql-connector-java-3.0.17-ga-bin.jar 241KB
index.jsp 2KB
upload.jsp 659B
META-INF
MANIFEST.MF 39B
UserInfo.jsp 2KB
Regist.jsp 3KB
music
pdd洪荒之力.mp3 6.22MB
Jquery
jquery-3.1.1.js 261KB
Main.jsp 2KB
DeleteSuc.jsp 1KB
AddNU.jsp 1KB
header.jsp 2KB
NewUser.jsp 3KB
RegistFail.jsp 1KB
images
backgd.jpg 50KB
图标.png 100KB
RegistSuc.jsp 1KB
Load.jsp 3KB
listFile.jsp 740B
.classpath 842B
共 54 条
- 1
资源评论
- 杰森斯坦森杨2018-06-02不知道应该怎么私聊你,我下载了您得这个系统,在header.jsp这个文件这里调试得时候出了点问题。您得function insert()这个函数我没有找到对应得地方,请问应该加到何处
qq_38501556
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功