jar包:common-io,common-fileupload
为保证服务器的安全,上传文件应该放在外界无法直接访问的目录下,如WEB-INF目录下
为保证文件覆盖的现象发生要为上传文件产生一个唯一文件名
限制上传文件的最大值
限制上传文件的类型,判端后缀名是否合法
ServletFileUpload负责处理上传的文件数据,并将表单中的每个输入项封装成一个FileItem对象;
DiskFileItemFactory解析ServletFileUpload对象请求;
使用表单上传文件,
get:上传文件大小有限制
post:上传文件没有大小限制
创建DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*1024);
factory.setRepository(tmpFile);
创建servletFileUpLoad对象将请求表单中的每一项转换为FileItem对象
ServletFileUpload upload = new ServletFileUpload(factory);
//监听上传进度
upload.setProgressListener(new ProgressListener() {
@Override
//l:已经读取到的文件大小
//l1:文件大小
public void update(long l, long l1, int i) {
System.out.println("总大小:" + l1 + "已经上传" + l);
}
});
//处理乱码问题
upload.setHeaderEncoding("UTF-8");
//设置单个文件的最大值
upload.setFileSizeMax(1024*1024*10);
//设置总共能上传文件大小
upload.setSizeMax(1024*1024*10);
处理上传文件
创建文件夹,为维持文件夹的原子性,使用uuid创建文件夹名
//把前端请求封装成一个FileItem对象,需要从servletFileUpLoad中获取
try {
List<FileItem> fileItems = upload.parseRequest(req);
//遍历每个fileitem对象
for (FileItem fileItem:fileItems){
//判断上传文件是带文件的表单还是普通的表单
if(fileItem.isFormField()){
//普通的表单
String name = fileItem.getFieldName();
//处理乱码
String value = fileItem.getString("UTF-8");
System.out.println(name + value);
}else {
//带文件的表单
//-------处理文件------//
String name = fileItem.getName();
System.out.println("name---->" + name);
if(name.trim().equals("")||name==null){
continue;
}
String fileName = name.substring(name.lastIndexOf("\\") + 1);
System.out.println("文件名------>"+fileName);
//-------存放地址------//
UUID uuid = UUID.randomUUID();
String realPath=uploadPath+"/"+uuid;
System.out.println("存放地址------>" + realPath);
File realPathFile = new File(realPath);
if(!realPathFile.exists()){
realPathFile.mkdir();
}
//-----文件传输-----//
InputStream is = fileItem.getInputStream();
FileOutputStream os = new FileOutputStream(realPathFile + "/" + fileName);
byte[] buffer = new byte[1024];
int len=0;
while ((len=is.read(buffer))>0){
os.write(buffer,0,len);
}
os.close();
is.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
若出现乱码文件需要添加过滤器对向servlet的请求进行过滤,以此避免中文乱码
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
filterChain.doFilter(servletRequest,servletResponse);
}
文章浏览阅读176次。生成目录使用[TOC]标题标题前面加#和空格几个#号表示几级标题,最多支持六级标题字体加粗需要加粗的文字左右分别用两个*号包裹斜体需要倾斜的文字左右分别用一个*号包裹倾斜加粗左右分别用三个*号包裹删除线需要删除线的文字左右分别用两个~~号包裹引用在引用的文字前加>引用也可以嵌套,如加两个>>分割线三个或者三个以上的-或者*都可以图片..._markdown声明一个图片地址复用
文章浏览阅读2.9w次,点赞17次,收藏87次。用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。 但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑使用内核模式。 Windows提供了许多内核对象来实现线程的同步。对于线程同步而言,这些内核对象有两个非常重要的状态:“已通知”状态,“未通知”状态(也有翻译为:受信状态,未受信状态)。Wi..._waitforsingleobject
文章浏览阅读5.1k次,点赞2次,收藏16次。1、 修复ssh相关漏洞漏洞列表:OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)OpenSSH glob表达式拒绝服务漏洞(CVE-2010-4755)OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)Openssh MaxAu..._cve-2016-6515
文章浏览阅读1.3w次。在对比了RabbitMQ,apacheMQ之后,发现还是 rocketMQ 好用。为什么好用,百度查查就都知道了。不说废话直接说说 Linux安装:1、需要软件(免安装版) 下载地址 [release 下载地址](https://github.com/apache/incubator-rocketmq/releases) https://github.com/apache/incu
文章浏览阅读358次。前言成功的经验是值得参考的,但我也要分享一下我较为失败的春招实习经验,算是给大家先踩踩坑吧~个人认为我的基础条件不差,无论是学校,还是项目、实习、博客。但我的春招还是极其不顺利的,最终也只收获了一家大厂。回顾一下过去大半年,感觉主要问题还在于没有对春招进行针对性复习和准备,最大问题就是基础知识准备太少了。以下的话记录一下准备过程,希望能有帮助:1. 明确岗位类型和主要语言我投的都是类似于后端开发岗,语言大部分都是Java,不过字节当时直接被内推到一个常用python的部门,因为没怎么准备,自然有点_基础不好后端实习
文章浏览阅读2.4k次。如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,文章整理了几种生成随机字符串的方法。方法一1、在33 – 126中生成一个随机整数,如35。2、将35转换成对应的ASCII码字符,如35对应#。3、重复以上1、2步骤n次,连接成n位的密码。该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数用于生成随机整数,..._php随机生成6位带数字和字母
文章浏览阅读1k次。解决的问题:有一台CentOS 7.6 Linux台式计算机,没有无线网络;想共享笔记本连接的无线网络,笔记本配置无线和有线以太网。解决方法:笔记本连接好WIFI; 笔记本以太网设置自动获得IP,自动获得DNS服务器..._centos 命令连接win10共享网络
文章浏览阅读184次。今天在看别人的C++程序源码的时候,看到了一个比较有用的C++的输入输出控制类。因为之前没有使用过,故特地学习了一下,在此总结。程序源码中使用了这样的语句:ifstream fin(fname);int a,b,c;string s;getline(fin, s);istringstream ss(s);ss >> a>>b>>c;将读..._c++中的istringstream函数
文章浏览阅读1k次。检索的原理和方法步骤 一、计算机EI检索的原理 计算机EI检索的原理是将检索者的提问与系统中的记录进行匹配运算,符合条件者即为命中记录,最后输出结果。主要检索功能有布尔逻辑检索、位置逻辑检索,字段限制和截词检索等。布尔逻辑检索由逻辑或(OR)、逻辑与(AND)和逻辑非(NOT)构成,不同检..._信息检索的原理与步骤
文章浏览阅读271次。关于SimpleDateFormat的两种使用的场景1、将将字符串类型日期转化为日期类型的数据//创建SimpleDateFormat对象,用来将字符串类型日期转化为日期类型的数据 SimpleDateFormat sdf = new SimpleDateFormat(); //创建java.util.Date对象 Date newbirthday = null; //字符串日..._simpledateformat.format用法不存在的月份
文章浏览阅读657次。作业报告目录项目需求提案计划书一、 项目介绍(一)项目背景(二)产品目的(三) 应用领域1.项目范围2.功能范围3.应用对象(四) 项目优势(五) 可行性分析1.技术可行性分析2.经济可行性分析3. 社会可行性分析项目需求萃取分析书一、 项目介绍(一)项目背景(二)项目目的(三)应用领域(四)项目前景二、问题描述(一)获取问题(二)明确问题(三)问题域分析三、涉众分析(一)涉众四、 硬数据采样Project Roadmap(一)自制的关于私人影院的相_domain model diagram百度云下载
文章浏览阅读2.1k次。在hosts中添加内容