JavaWeb实现文件上传功能详解
时间:2022-10-11 12:11:41|栏目:JAVA代码|点击: 次
文件上传功能的实现
在大多数网站中,我们都可以看见文件上传和下载功能的实现,今天我们就文件上传做一个详细的总结
实现步骤:
1、新建一个JSP页面:表单必须设置:enctype="multipart/form-data"参数 upload.jsp:
<form action="" method="post" enctype="multipart/form-data"> <!--accept=".txt"标签用来确定上传的文件默认类型--> 请选择您要上传的文件:<input type="file" name="fileName" accept=".txt" /> <br/> 确认上传?<input type="submit" value="确认" /><input type="reset" value="重选" /> </form>
2、编写后端功能Servlet代码:
UploadFile.java:
具体实现思路:
--------1、设置编码方式为utf-8,获取字符流
--------2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象
--------3、设置文件缓存目录
--------4、加载文件缓存目录,创建ServletFileUpload对象
--------5、设置文件编码为utf-8
--------6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name
--------7、遍历表单name集合,判断哪一些是普通字段和文件字段,进行区分
--------8、得到所上传的文件路径名
--------9、截取文件名
--------10、设置上传的目标文件夹路径
--------11、通过字节流进行文件的对拷
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、设置编码方式为utf-8,获取字符流 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter write = response.getWriter(); //2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //3、设置文件缓存目录 File file = new File("C:\\Cache"); if(!file.exists()) { //如果文件不存在,就创建一个文件 file.mkdirs(); } diskFileItemFactory.setRepository(file); //加载文件缓存目录 //4、创建ServletFileUpload对象 ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //5、设置文件编码为utf-8 fileUpload.setHeaderEncoding("utf-8"); //6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name --->比如:这里只有一个name="fileName" 拿到的就是这个集合 List<FileItem> fileItems = null; try { fileItems = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } //8、遍历集合 for(FileItem fileItem:fileItems) { //文本域 //判断是否为普通字段 if(fileItem.isFormField()) { //得到字段名、字段值 String name = fileItem.getFieldName(); // } //为文件域 else { //9、得到所上传的文件路径名 String fileName = fileItem.getName(); //10、截取文件名 String fiString = fileName.substring(fileName.lastIndexOf("\\")+1); //11、设置上传的目标文件夹路径 File filedir = new File("C:\\NewFile"); if(!filedir.exists()) { filedir.mkdir(); } // System.out.println(user.getUserName()); File filepath = new File(filedir+"\\"+fiString); // System.out.println(fiString); if(!filepath.exists()) { filepath.createNewFile(); } //获得文件上传流 InputStream in = fileItem.getInputStream(); //使用FileOutStream打开服务器端的上传文件 FileOutputStream out = new FileOutputStream(filepath); //流的对拷 byte[] bb = new byte[1024]; int len ; while((len= in.read(bb))>0) { out.write(bb, 0, len); // out.close(); // in.close(); fileItem.delete(); //删除临时文件 } write.println("文件上传成功<br/>"); } } }