需求:利用网页表单提交文件,上传至服务器。
前端页面表单 enctype=”multipart/form-data”
<form action="upload" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="up1"/><br/><br/>
文件描述:<input type="text" name="desc"/><br/><br/>
上传文件:<input type="file" name="up1"/><br/><br/>
文件描述:<input type="text" name="desc"/><br/><br/>
<input type="submit" value="提交"/>
</form>
后台服务器:通过request流的方式接受过来看看。
我上传的文件如下,文件名:a.txt
通过request收到后台,输出来
解析代码
InputStream in = request.getInputStream();
BufferedReader br = new BufferedReader( new InputStreamReader(in));
String line=null;
while( (line=br.readLine())!=null){
System.out.println(line);
}
输出内容
只要把这个内容解析出来,在通过流生成文件,就完成了文件上传。
可是———–我不会。
只能调用别人的包了。这两个包(导入lib目录下)
剩下的代码就变成这样的啦。 我已经写好了的啦
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在POST2方式提交下只能设置文件名字的编码
request.setCharacterEncoding("utf-8");
//创建一个用来存储上传临时文件的类(不创建Tomcat会采用默认的)
// 参数:缓存文件大小,路径; 缓存文件达到5*1024B时就会刷缓存
FileItemFactory f = new DiskFileItemFactory(1024*5, new File("E/a"));
//文件上传的解析器
ServletFileUpload upload = new ServletFileUpload(f);
//设置单个文件的最大文件大小:3M
upload.setFileSizeMax(1024*1024*3);
//设置所有文件的容量:30M
upload.setSizeMax(1024*1024*3*10);
try {
List<FileItem> list = upload.parseRequest(request);
//表单提交两种类型:POST1普通表单(信息)提交、POST2文件上传提交;
for(FileItem fi:list){
//fi.isFormField():true---POST1; false---POST2
if(fi.isFormField()){
//拿到POST1方式提交的内容
String str = fi.getString("utf-8");
System.out.println("文件描述:"+str);
}else{
//拿到上传的文件名
String name = fi.getName();
if(fi.getSize()==0){
continue;
}
String ext = name.substring(name.lastIndexOf('.'));
String fileName = UUID.randomUUID().toString().replaceAll("-", "")+ext;
System.out.println("文件名:"+fileName);
//拿到上传文件的流:文件内容导入流
InputStream in = fi.getInputStream();
//拿到文件存放的位置
String path = getServletContext().getRealPath("/uploads");
//再通过工具类帮忙把文件内容考到知道路径
FileUtils.copyInputStreamToFile(in, new File(path+"/"+fileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}