本例的知识点:
1.了解上传文件时,表单的网页必须是:enctype="multipart/form-data"
2.了解上传文件时,servlet的类必须要使用 @MultipartConfig 这个注解
3.在servlet中,得到文件的输入流是: InputStream is = part.getInputStream();
4.因为网站具体放在经销商主机的哪个位置我们不知道,所以要求出来,
求的方法是:
this.getServletContext().getRealPath("/upload")+"/"+fileName;
并且这个路经去生成一个输出流
5.有了输入流和输出流后,就可以用书上关于文件流的操作方法进行上传了。
第一步:要求在工程目录先建一个upload文件夹,接收的文件就放在这个文件夹之中。
-------------------------------
第二步:写前端jsp文件
------------------------
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<h1>index.jsp</h1>
<form action="xxx" method="post" enctype="multipart/form-data">
文件描述<input type="text" name="filedesc" /><br/>
请选择需要上传的文件:<input type="file" name="upload" /><br />
<input type="submit" value="上传" />
</form>
</html>
------------------------------------------
第三步:写后端servlet文件
-------------------------------------------
注意必须要有@MultipartConfig这个注解,不然会报Part错误
--------------------------------------------------------------------------------
@WebServlet(name = "BServlet",urlPatterns = "/xxx")
@MultipartConfig
public class BServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("文件描述:"+request.getParameter("filedesc"));
//不能接受对方传过来的文件名,只能把对方选定的文件接收为Part
Part part = request.getPart("upload");
System.out.println("文件大小:"+part.getSize());
//如果你一定要知道对方传过来的文件名,就用这一句去求
System.out.println("form表单中part部分的name属性名称"+part.getName());
获得Content-Disposition的头信息
String header = part.getHeader("Content-Disposition");
//获取header中filename="字符串的开始下标
int idx = header.lastIndexOf("filename=\"");
//取出从这个长度开始到总长度-1中的字符串
String fileName = header.substring(
idx+"filename=\"".length(), header.length()-1);
System.out.println("文件名:"+fileName);
//获得文件内容:
InputStream is = part.getInputStream();
//注意这里求输出文件的路经
OutputStream os = new FileOutputStream(
this.getServletContext().getRealPath("/upload")+"/"+fileName);
byte[] bt = new byte[1024];
int len = 0;
while ((len = is.read(bt)) != -1) {
os.write(bt, 0, len);
}
is.close();
os.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}