文件上传的概念想必大家都知道,这里不多嘴
首先写一个form表单
<form enctype="multipart/form-data" action="/sub" method="post">
<input type="file" name="txt"><br>
<input type="submit" value="提交">
</form>
这里就是一个坑,读文件内容一定要加
enctype="multipart/form-data"
不然输出的是type=filename!!
然后就是servlet的事情:
@WebServlet("/sub")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream inputStream = req.getInputStream();
Reader reader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader br = new BufferedReader(reader);
String str ="";
while((str=br.readLine())!=null){
System.out.println(str);
}
}
}
这里就是简单的io操作,se里面的内容!
接下来运行,如果报了404的错误,404首先肯定就是url错了,如图:
这个路径要注意一下!!
到这里你就会觉得,这跟之前不是一样吗?
但是我们在控制台看的内容是:
这是浏览器自带的,我们弄不掉!并且还有后缀
所以得用servlet的tools了
在这之前,先在maven配置一下
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
好,开干!
try {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
List<FileItem> list = servletFileUpload.parseRequest(req);
System.out.println(list);
} catch (FileUploadException e) {
e.printStackTrace();
}
先看看list是啥?
就是上传的文件的属性,也就是说一个文件对象代表了表单的一个input
@WebServlet("/sub")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
List<FileItem> list = servletFileUpload.parseRequest(req);
for (FileItem fileitem: list) {
if(fileitem.isFormField()){
String name = fileitem.getFieldName();
String value = fileitem.getString();
System.out.println(name+" : "+value);
}else{
String fileName = fileitem.getName();
long size = fileitem.getSize();
System.out.println(fileName+":"+size+"Byte");
InputStream inputStream = fileitem.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
String path = req.getServletContext().getRealPath("file/copy");
OutputStream outputStream =new FileOutputStream(path);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
String temp = null;
while((temp=br.readLine())!=null){
bw.write(temp);
}
bw.flush();
bw.close();
br.close();
outputStream.close();
inputStream.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
注意这里的file默认在target(老版本叫out)文件下的,
这里就实现了网页上传文件,写出到本地!!