传智播客Java培训

您所在的位置:网站首页 传智播客java培训多长时间 传智播客Java培训

传智播客Java培训

2024-07-13 07:21| 来源: 网络整理| 查看: 265

按老师的说法,以后几天的课程不用像前几天那样紧张了,可以多拿点时间消化一下前几天的学习了东西了,这几天的讲的内容太多而且大部分都很重要还不容易理解,对于一些内容到现在还是不是很明白,我想这是不是在课程安排的时候特意这么做的,在进行了几天比较难的课程后插一段比较简单的,要是真是这样的话这设计课程的人也太牛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