热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

基于Java文件输入输出流实现文件上传下载功能

这篇文章主要为大家详细介绍了基于Java文件输入输出流实现文件上传下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下

前端通过form表单的enctype属性,将数据传递方式修改为二进制”流“的形式,服务端(servlet)通过  getInputStream() 获取流信息, 运用java I/O 流的基础操作将流写入到一个服务端临时创建的文件temp中,然后再次利用文件基本操作,读取并截取临时文件内容,根据其中信息创建相应的文件,将读取出来的具体信息写入,下载时,根据提交的文件名称,找到服务器端相应的文件,然后根据输出流outStream输出到页面,同时将servlet的响应类型和响应头进行设置。

具体传输流程如下图:

流信息的部分为:

具体代码如下:

前端代码:








 
 
请选择上传文件:
${info}
文件下载:${filename}

上传servlet部分(核心)

@WebServlet("/FileUpServlet")
public class FileUpServlet extends HttpServlet {
 private static final long serialVersiOnUID= 1L;
  
 /**
  * @see HttpServlet#HttpServlet()
  */
 public FileUpServlet() {
  super();
  // TODO Auto-generated constructor stub
 }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doPost(request, response);
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  request.setCharacterEncoding("utf-8");
  InputStream filesource = request.getInputStream();//request获取流信息
  String tempname = "D:/temp";//tempfile代表临时存放文件
  File tempfile = new File(tempname);//创建临时文件
  
  FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile目录下
  byte b[] = new byte[1024];
  int n;
  while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直至读完
  {
   outputStream.write(b,0,n);
  }
  outputStream.close();
  filesource.close();//关闭输入输出流
  
  
  /*以下为具体的文件操作,主要为解析临时产生的 temp文件 ,知识多为java输入输出流的内容!*/
  

  RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时文件,只读
  randomfile.readLine();//读取第一行,无效数据,不需要
  String str = randomfile.readLine();//读取第二行
  int beginIndex = str.lastIndexOf("=")+2;//指定所需数据的开始位置
  int endIndex = str.lastIndexOf("\"");//指定所需数据截至位置
  String filename = str.substring(beginIndex,endIndex);//截取文件名
  
  //重新定位文件指针,获取文件内容
  randomfile.seek(0);//文件指针从头开始
  long startext = 0;
  int i = 1;
  //文件内容开始位置
  while((n=randomfile.readByte()) != -1&&i <= 4)
  {
   if(n=='\n')
   {
    startext = randomfile.getFilePointer();
    i++;
   } 
  }
  startext = randomfile.getFilePointer() - 1;
  //获取文件内容 结束位置
  randomfile.seek(randomfile.length());
  long endtext = randomfile.getFilePointer();
  int j = 1;
  while(endtext >= 0 && j <= 2)
  {
   endtext--;
   randomfile.seek(endtext);
   if(randomfile.readByte()=='\n')
   {
    j++;
   }
  }
  endtext = endtext-1;
  
  //将临时文件保存至指定目录中 
  String realpath = getServletContext().getRealPath("/")+"images";//设置文件保存目录
  System.out.println(realpath);
  File fileupload = new File(realpath);
  if(!fileupload.exists())
  {
   fileupload.mkdir();//目录不存在则创建
  }
  File savefile = new File(realpath,filename);
  RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");
  randomfile.seek(startext);
  while(startext

下载部分

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  String filename = request.getParameter("filename");
  String path = getServletContext().getRealPath("/")+"images/";
  File file = new File(path+filename);//找到文件
  if(file.exists())
  {
   response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型
   response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开
   InputStream inputStream = new FileInputStream(file);
   ServletOutputStream outputStream = response.getOutputStream();
   byte b[] = new byte[1024];
   int n;
   while((n = inputStream.read(b)) != -1)
   {
    outputStream.write(b,0,n);
   }
   outputStream.close();
   inputStream.close();   
   }else{
   request.setAttribute("result", "文件不存在!下载失败!");
   request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);
  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了如何使用jQuery防止事件冒泡,确保子元素的点击事件不会触发父元素或祖先元素的相应事件。通过具体的代码示例和解释,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • FineUI 是一款基于 jQuery 的专业级控件库,专为 ASP.NET WebForms 和 MVC 开发设计。它提供了丰富的用户界面组件,简化了复杂 Web 应用程序的开发过程。 ... [详细]
  • 本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 在网站制作中随时可用的10个 HTML5 代码片段
    HTML很容易写,但创建网页时,您经常需要重复做同样的任务,如创建表单。在这篇文章中,我收集了10个超有用的HTML代码片段,有HTML5启动模板、空白图片、打电话和发短信、自动完 ... [详细]
author-avatar
手机用户2702932962_848
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有