文件上传
JSP
1.input的type设为file
2.form表单的method设为“post”,get请求会将文件名传给服务端,而不是文件本身;
3.form表单的enctype设置multipart/form-data,以二进制形式传输数据;
servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过输入流获取到客户端传来的数据流
InputStream inputStream = req.getInputStream();
Reader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
//通过输出流将数据输出到本地硬盘存起来
//获取文件夹的绝对路径
String path = req.getServletContext().getRealPath("/file");
String str = "";
OutputStream outputStream= new FileOutputStream("file");
while (((str = bufferedReader.readLine())!= null)){
System.out.println(str);
}
}
文件下载
tips:Build->Rebuild Project可以重新构建项目。
JSP
<!-- 点击下载不同的文件 -->
<body>
<a href="/download?type=jpg">picture</a>
<a href="/download?type=test">test.txt</a>
</body>
servlet
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String type = req.getParameter("type");
String fileName = "";
//判断下载哪个文件
switch (type){
case "jpg":
fileName="1.jpg";
break;
case "test":
fileName="test.txt";
}
//设置响应方式
resp.setContentType("application/x-msdownload");
//设置下载之后的文件名
resp.setHeader("Content-Disposition","attachment;filename="+fileName);
//获取输出流
OutputStream outputStream = resp.getOutputStream();
//获取文件绝对路径
String path = req.getServletContext().getRealPath("file/"+fileName);
InputStream inputStream = new FileInputStream(path);
int temp = 0;
while ((temp=inputStream.read())!=-1) {
outputStream.write(temp);
}
inputStream.close();
outputStream.close();
}