目录
1 文件上传
1.1 文件上传入门
1.1.1 实现文件上传条件
1)表单的提交方式必须是POST方式。(才有content-type属性)
2)有文件上传表单,表单中有<input type="file"/>的选择文件的标签
3)把表单设置为enctype="multipart/form-data",提交的数据不再是key-value对,而是字节数据
<form action="${pageContext.request.contextPath }/UploadDemo1" method="post" enctype="multipart/form-data"> 请选择文件: <input type="file" name="img"/><br/> <input type="submit" value="上传" /> </form> |
1.1.2 手动解析上传文件
/** * 手动处理上传文件的逻辑 * @author APPle */ public class UploadDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到实体内容数据 InputStream in = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in));
//读取文件的开始符 String startTag = br.readLine();
//读取文件名: Content-Disposition: form-data; name="img"; filename="news.txt" String line = br.readLine(); String fileName = line.substring(line.lastIndexOf("filename=\"")+10, line.lastIndexOf("\"") ); System.out.println("文件名:"+fileName);
//跳过2行 br.readLine(); br.readLine();
//读取文件的实际内容 String str = null; BufferedWriter bw = new BufferedWriter(new FileWriter("E:/files/"+fileName)); while((str=br.readLine())!=null){ //读到文件结束符时退出循环 if((startTag+"--").equals(str)){ break; }
//把内容写出文件中 bw.write(str); bw.newLine(); bw.flush(); } //关闭 bw.close(); br.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
1.2 工具实现文件上传
1.2.1 commons-fileupload组件概述
commons-fileupload是Apache组织旗下的开源的文件上传的组件。使用非常简单易用。
1.2.2 核心的API
DiskFileItemFactory类: 用于创建上传对象,设置文件缓存区大小,设置文件缓存目录。
ServletFileUpload类: 用于在Servlet程序中实现文件上传
List<FileItem> list = parseRequest(request): 用于解析请求数据,提取和封装文件信息。
FileItem类: 封装一个文件的所有相关的信息javabean。包含文件名称,文件大小,文件类型,文件数据内容。
1.2.3 fileUpload开发步骤
1)导入commoms-fileuload的jar包
commons-fileupload-1.2.2.jar 核心包
commons-io-2.1.jar 辅助包
2)编写程序
1.3 实现单文件上传
//1.创建DiskFileItemFactory类 /** * 参数一: 表示文件缓存区的大小。如果上传的文件没有超过缓存区大小,则文件不缓存;否则缓存文件,缓存到临时目录。(byte) * 参数二: 表示缓存区的临时目录。 */ DiskFileItemFactory factory = new DiskFileItemFactory(10*1024,new File("e:/temp/"));
//2.创建ServletFileUpload类 ServletFileUpload upload = new ServletFileUpload(factory);
/** * 设置文件名的编码 */ upload.setHeaderEncoding("utf-8");
//3.解析request数据(把每一个文件封装到FileItem对象中,FileItem放入List中) |