3月1号传智播客JAVA失业班学习笔记
2.List parseRequest(HttpServletRequest request)
对requests对象进行解析,并把表单中的每一个输入项包装成一个fileItem
讲课教员 方立勋
文件上传和下载
使用Commons-fileupload组件实现文件上传,需要导入该组件相应的jar包.
Commons-fileupload和commons-io两个jar包.
在HTML页面
input 必须有 name
<input type="file" name="filename">
表单若是包括一个文件上传输入项的话,这个表单的enctype属性就必须设
置为multipart/form-da
<form act
enctype="multipart/form-da
\:表示路径,例如:c:\windows\
时,它将采用MIME和谈对数据进行启装后提交,在服务器这端也将不能采用
经典面试题
在服务器端想获取数据就要通过流。
request提供了一个getInputStream读取流。
为了方便用户处理文件上传数据,Apache开源组织提供了一个用来处理表单
文件上传的一个开源组件(Commons-fileupload).
ServletFileUpload upload=new ServletFileUpload(factory);
DiskFileItemFactory是创建FileItem对象的工厂包括方法:
1.public void setSizeThreshold(int?sizeThreshold)
设置内存缓冲区的大小,默认值为10K,若是文件大于10K,将使用且自文件缓
存上传文件.
2.public void setRepository(java.io.File repository)
指定且自文件目录
3.public DiskFileItemFactory();
FileItemDelete
5.setHeaderEncoding()设置编码格式
常用方法:
1.boolean isMultipartContent(HttpservletRequest request)
判断上传表单是否为上传表单类型
java web 第十六天笔记
对象,并返回一个保存了所有FileItem的list集合.
3.se金秀贤tFileSizeMax(long fileSizeMax)设置上传文件最大值
4.setSizeMax(long sizeMax)设置上传文件总量的最大值
一个FileItem对象中.
实例:
判断提交表单的类型是否为multipart/form-da
DiskFileItemFactory factory=new DiskFileItemFactory();
注意:
public class UploadServlet extends HttpServlet{
if(!upload.isMultipartContent(request))
{
return;
}
try
{
List list=upload.parseRequest(request);
Iterator it=list.iterator();
1.上传文件怎么包管服务器的安全?
if(item.isFormField())//判断input是否为普通表单输入项
多文件上传问题:
主要是javas
String value= item.getString();input的值
}else{
可以使用UUID算法.
得到上传文件要写入的目录
String path=this.getServletContext().getRealPath("/upload");
凭据目录和文件创建输出流
FileOutputStream out=new FileOutputStream(path+filename);
InputStream in = item.getInputStream();
byte buffer[] = new byte[1024];
int len = 0;
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();
}
}
} catch (FileUploadException e)
{
e.printStackTrace();
}
}
String name=item.getFieldName();input的名称
同学问题:
甚么时候用/ 甚么时候用\
教员解答;
/:表示url地址,例如http://loacalhost:8080/
自己写一个监听器progressListener
浏览器表单的类型若是为multipart/form-da
new FileOutputStream("c:\\1.txt");
要JAVA语言里面,"\"代表转义.
解决上传中文乱码问题
可以通过
upload.setHeaderEncoding("utf-8");
while(it.hasNext())
{
FileItem item=(FileItem)it.next();//每一个item就代表一个表单输出项
解决方案:上传目录要禁行外界直接访问,一般的做法是把上传目录放到服务
上传文件时不安全应用举例
Runtime.getRuntime.exec("")
可以执行DOS敕令.
2.上传文件被覆盖的问题
服务器要为每一个上传文件生成一个唯一的文件名.
算法 一个数异或两次,得到是数据本身.
x=1;
y=2;
3.上传的文件需要打散
原来传统的方工获取数据了。
得到上传文件的名称,并截取
String filename=item.getName();
x=x^y;
y=x^y;
x=x^y;
异或常常用来加密
器的WEB-INF目录下.这个目录服务器是保护的,外界无法访问.
且自文件的删除
ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项启装成
删除且自文件一定要在流关闭以后,否则会呈现文件占用,而招致删除失败.
}
监听上传进度:
request.getRequestDispacher("/");