`
明天会更浩
  • 浏览: 5765 次
  • 性别: Icon_minigender_1
社区版块
存档分类

关于文件上传下载详细笔记

 
阅读更多

           刚学完Web的文件上传下载功能,之前学.net的时候就接触过Web文件的上传下载功能,但无奈.net的功能封装的使用太过简单,都完全搞不懂技术要点,一个fileuploade服务端控件,什么都搞定。学java的长传下载功能听起来很简单,但练习的时候还是犯了一些低级错误。

            简单总结下文件上传/下载实现流程。

             文件上传:我们通过阿帕奇的一个开源组件对文件进行上传。即fileuplode组件。

                       1)首先需要一个表单,一个控件<input type="file">值得注意的是form后面必须有enctype="multipart/form-data"这样一段内容。

                        2)准备一个出来表单的servlet,这时候可以将apache的两个jar包导入到工程,分别是主包commons-fileupload-1.2.1.jar和支撑jar包commons-io-1.4.jar。

                        3)需要了解上传的几个核心api代码如下:

 

 //得到工厂
  FileItemFactory fif=new DiskFileItemFactory();

//通过工厂获得ServletFileUpload 实例
  ServletFileUpload file=new ServletFileUpload(fif);

//判断是否为文件提交表单
  if(ServletFileUpload.isMultipartContent(request)){
   try {

//通过ServletFileUpload 获得上传的FileItem集合,每一个上传参数对应一个FileItem
    List<FileItem> list=file.parseRequest(request);
   //遍历集合
    for(FileItem item:list){

//普通表单的处理方式,值得注意的是表单使用enctype="multipart/form-data字样后,参数不能通过request.getParameter()方式获取
     if(item.isFormField()){

      System.out.println(item.getFieldName());
      System.out.println(item.getString("utf-8"));
     }

//处理上传的文件

else{

//获得上传文件名
      String filename=item.getName();

//出来上传的文件文件名,加上系统时间前缀,避免上传文件名重复。
      filename=System.currentTimeMillis()+"^"+filename;

//将文件写入到指定 的位置。
      String path=getServletContext().getRealPath("/uplode");
      item.write(new File(path,filename));
     }
    }
   } catch (Exception e) {
    
    e.printStackTrace();
   }
   
  }

文件下载:文件下载需要注意几点。

                  1)通常使用指定的路径来获取文件夹下的所有文件的名字:

                        String path=getServletContext().getRealPath("/uplode");
                         File files=new File(path);
                         String[] names=files.list();

                   2)将文件的名字通过map集合带到jsp中展示,key为文件的全名(即上传后加上的前缀)value为文件被上传时使用的名字(即通过字符串截取去掉前缀后的名字)这样文件在jsp中列表的时候使用value,点击下载时则将key带到服务器进行处理

                    3)下载请求的处理代码如下:

 try {
   String key=request.getParameter("key");
   if(key==null||key.trim().length()<=0){
    return;
   }
   response.setHeader("content-disposition", "attachment; filename=" + key.substring(key.lastIndexOf("^")+1));
   InputStream in=getServletContext().getResourceAsStream("/uplode/"+key);
   OutputStream out = response.getOutputStream();
   byte[] b=new byte[1024];
   int len=0;

//这里容易出错,如果写成while((len=in.read())!=-1)你就悲剧了运行不会报错,但是下载的文件就会出问题,调试的时候一直以为是路径的问题,浪费了很多时间,估计很久找不到,我就犯了这样的低级错误。
   while((len=in.read(b))!=-1){
    out.write(b, 0, len);
   }
   out.close();
   in.close();
  } catch (Exception e) {
   throw new RuntimeException(e);
  }

1
0
分享到:
评论

相关推荐

    fastdfs文件上传下载笔记

    fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,fastdfs文件上传下载笔记,...

    PHP文件上传与下载学习笔记

    在PHP中,文件上传和下载是常见的Web应用功能,用于处理用户上传的文件或提供文件供用户下载。本文将深入探讨PHP文件上传的配置、PHP如何获取上传文件信息以及配置文件的相关设置。 ### 1. 文件上传配置 PHP的文件...

    web网站文件上传漏洞和攻击-运维安全详细笔记

    Web 网站文件上传漏洞和攻击 - 运维安全详细笔记 文件上传漏洞是 Web 应用程序中的一种常见漏洞,攻击者可以通过上传恶意文件来获取服务器的控制权。本文将详细介绍文件上传漏洞的原理、实验步骤和防御方法。 一、...

    webwork 上传文件与下载文件 使用笔记

    WebWork提供了丰富的特性,如类型转换、验证、国际化、文件上传和下载等,这些功能使得开发者可以更高效地构建高质量的应用程序。 #### 二、文件上传基础知识 文件上传是Web应用程序中的常见需求之一。在WebWork中...

    读写Excel jxl.jar 读xml (log4j 文件上传下载笔记).rar

    这篇文档将深入探讨Java中如何使用jxl.jar库进行Excel文件的读写操作,解析XML文件,以及关于log4j的日志记录系统和文件的上传下载笔记。在现代的IT环境中,这些技能对于数据处理、日志管理和系统交互至关重要。 ...

    Web文件的上传与下载源码

    至于PPT和课堂笔记.doc,它们可能是关于这个主题的教程资料,可能涵盖了文件上传下载的基本概念、常见问题及解决方案,包括但不限于文件大小限制、安全性(如防止恶意文件上传)、进度条显示、断点续传等。...

    小迪安全笔记,详细版本

    【小迪安全笔记】详细介绍了网络安全领域的多个关键知识点,涵盖了域名、DNS系统、CDN、DNS攻击、脚本语言以及后门等方面。 1. **域名**:域名是互联网上识别计算机或计算机组的名称,由点分隔的名字组成,如...

    SSM笔记-SpringMVC的上传和下载

    本笔记主要围绕SpringMVC如何实现文件的上传和下载进行讲解。 首先,我们要理解上传和下载的基本原理。文件上传是指客户端(通常是Web浏览器)将本地文件发送到服务器的过程;而文件下载则是服务器将文件内容发送回...

    yii2 文件上传笔记

    yii2 文件上传笔记

    PHP开发笔记系列(八)- 上传与下载

    当用户通过HTML表单提交包含文件的请求时,PHP会接收到一个特殊的数组`$_FILES`,其中包含了关于上传文件的所有信息,如文件名、类型、大小、错误状态等。例如: ```php if ($_SERVER['REQUEST_METHOD'] === 'POST'...

    asp.net中多文件上传学习笔记

    本学习笔记将详细介绍如何在ASP.NET环境中实现这一功能,并确保文件上传时不重复。 首先,我们需要了解ASP.NET中的文件上传控件`&lt;asp:FileUpload&gt;`。这个控件允许用户选择一个或多个文件进行上传。在HTML表单中,...

    尚硅谷Linux学习笔记(不包含shell)超级详细版

    我自己看完韩顺平老师在尚硅谷发布的新版的Linux的视频...网上看到了别的网友分享的其他资源的学习笔记,下载下来看了之后感觉还有可以优化的地方,之后也会把其他的笔记整理好上传下来,不过最重要的是看完后要实践。

    尚硅谷SpringMVC部分全套教学文档笔记

    《尚硅谷SpringMVC部分全套教学文档笔记》涵盖了SpringMVC框架的核心概念和技术,通过一系列章节深入浅出地讲解了SpringMVC的各个方面。...这些文档笔记详细讲解了每个主题,是学习和进阶SpringMVC的重要参考资料。

    Servlet文件上传和下载

    JavaServlet文件上传和下载,java初学者笔记!

    App上传全程笔记

    本文档详细记录了在Xcode 5.1版本下上传APP至App Store的完整流程,旨在帮助开发者避免遇到常见问题,提高上传效率。 1. **准备工作** 在正式发布APP之前,你需要成为苹果开发者计划的成员,并且拥有用于发布应用...

    docker安装nginx1.15.9详细笔记文档

    "Docker 安装 Nginx 1.15.9 详细笔记文档" 本文档详细记录了使用 Docker 安装 Nginx 1.15.9 的过程,包括镜像的上传、容器的创建和配置文件的设置。下面是对标题、描述、标签和部分内容的解释和知识点总结: 标题...

    struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)

    在本篇“Struts2学习笔记十四”中,我们将深入探讨Struts2框架如何实现文件上传和下载功能,这是web应用中常见的需求,尤其在处理用户提交的表单数据时。我们将不涉及具体代码,而是重点讲解相关概念和技术原理。 ...

    压缩文件的上传和下载

    本话题将详细讲解如何进行压缩文件的上传与下载,以及如何处理中文文件名的问题。 首先,让我们理解压缩文件。压缩文件是一种通过特定算法将多个文件或文件夹合并为一个单一的、体积更小的文件,以节省存储空间和...

    09_尚硅谷_文件的上传和下载_王振国 - 课堂笔记1

    文件上传和下载技术详解 文件上传和下载是许多系统和软件中常见的功能,例如QQ头像、邮箱附件、OA系统审批等。文件上传和下载技术是指用户将文件从客户端上传到服务器端,或者从服务器端下载到客户端的过程。 文件...

Global site tag (gtag.js) - Google Analytics