传智播客Java培训 |
您所在的位置:网站首页 › 传智播客java培训多长时间 › 传智播客Java培训 |
按老师的说法,以后几天的课程不用像前几天那样紧张了,可以多拿点时间消化一下前几天的学习了东西了,这几天的讲的内容太多而且大部分都很重要还不容易理解,对于一些内容到现在还是不是很明白,我想这是不是在课程安排的时候特意这么做的,在进行了几天比较难的课程后插一段比较简单的,要是真是这样的话这设计课程的人也太牛X了,今天上课主要的内容是文件的上传和下载的操作,讲完这些基本操作后老师带我们做了一个小案例,把代码综合练习了一下,要求把文件上传到服务器端,并把文件信息放入数据库,还可以在页面查看所有上传文件的信息列表,通过读取数据库信息实现下载,案例比较简单,但是最后还是出了问题,可以下载不带中文字符的资源,但是带中文字符就会出现乱码,报一个文件找不到异常,上课老师讲了两种防止文件乱码的方式: response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("ISO-8859-1"),"gbk")); 基于Commons-fileupload 组件的文件上传表单中的表单元素 ,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。使用表单上传文件首先要指定表单 enctype 的值为 multipart/form-data,它指定了发向服务器的浏览器使用的编码类型,表示表单以二进制传输数据 。导入commons-io-1.4.jar和commons-fileupload-1.2.1.jar两个jar包。// Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request try { List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); } else { String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); File uploadedFile = new File("E://"+fileName+""); item.write(uploadedFile); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }文件下载 从JSP页面点击链接下载文件流程:1 点击链接到servlet中处理,在servlet中首先要设置 2 个报头:/* *设置响应报头 contentType: application/x-msdownload --> *告诉浏览器其所输出的内容的类型不是普通的文本文件或 HTML 文件, *而是一个要保存到本地的下载文件 */ //response.setHeader("content-type", "application/x-msdownload"); //另一种设置方法 response.setContentType("application/x-msdownload"); /* * 设置响应抱头 Content-Disposition: attachment * Web 服务器希望浏览器不直接处理相应的实体内容, * 而是由用户选择将相应的实体内容保存到一个文件中 * defaultname是默认保存的文件名 */ //response.setHeader("Content-Disposition ", " attachment; filename=defaultname "); //另一种设置方法 response.setHeader("Content-Disposition", "attachment; filename=defaultname"); 2 读取需要下载的文件 //获取下载文件存放目录的绝对路径 String path = this.getServletContext().getRealPath("/download"); //得到要下载文件的绝对路径 String downpath = path + "//LICENSE.txt"; //读取文件 BufferedInputStream bfis = new BufferedInputStream(new FileInputStream(downpath));3 将文件写入到响应输出流 BufferedOutputStream bfos = new BufferedOutputStream(response.getOutputStream()); byte [] b = new byte[200*1024]; int len = 0; while((len=bfis.read(b))!=-1){ bfos.write(b,0,len); } bfis.close(); bfos.close();
我挨个试了都不好使,从网上也找了几个类似的解决方案,但是天不助我,纠结了一个多小时找不到原因,郁闷... 简单文件上传和下载的步骤和基本代码: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |