`
java虫
  • 浏览: 535729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于文件下载的几个问题总结

阅读更多
使用servlet来下载文件,其原理非常简单,只要得到文件的输入流(或相应字节),然后写输出流即可。现就其中的几个细节问题展开:
1.      MIME类型的设置:
Web 浏览器使用 MIME 类型来识别非 HTML 文档,并决定如何显示该文档内的数据。
例如EXCEL文件的 MIME 类型是 "application/vnd.ms-excel "。要用servlet 来打开一个 EXCEL 文档,需要将 response 对象中 header 的 contentType 设置成“application/vnd.ms-excel ”。
response.setContentType(contentType);

2.      Content disposition
HTTP response header中的content-disposition 允许 servlet 指定文档表示的信息。使用这种header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。
如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。如果没有指定,则对话框中就会出现 servlet 的名字。
servlet 中,将 header 设置成下面这样:
response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );

response.setHeader("Content-Disposition",  "inline; filename="fliename)
点击打开会在ie中打开。


需要说明的有三点:
Ø         中文文件名需要进行iso8859-1转码方可正确显示:
fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
Ø         传递的文件名,需要包含后缀名(如果此文件有后缀名),否则丢失文件的属性,而不能自行选择相关程序打开。
Ø         有下载前询问(是打开文件还是保存到计算机)和通过IE浏览器直接选择相关应用程序插件打开两种方式,前者如上代码所示,后者如下:
response.setHeader("Content-disposition","filename="+ "Example.xls" );
3.       在研究文件的上传及下载过程中,有几点体会
程序的I/O操作往往是性能的瓶颈所在,java io定义了两个基本的抽象类:InputStream和OutputStream,对于不同的数据类型比如磁盘,网络又提供了不同的实现,java.io也提供了一些缓冲流(BufferedStream),使硬盘可以很快的读写一大块的数据, 而Java基本的I/O类一次只能读写一个字节,但缓冲流(BufferedStream)可以一次读写一批数据,,缓冲流(Buffered Stream)大大提高了I/O的性能。所以:
Ø小块小块的读写数据会非常慢,因此,尽量大块的读写数据 
Ø使用BufferedInputStream和BufferedOutputStream来批处理数据以提高性能 
Ø对象的序列化(serialization)非常影响I/O的性能,尽量少用  

分享到:
评论
5 楼 husan 2011-01-12  
不错,解决了我的问题,filename中文乱码
4 楼 W_h 2010-04-14  
类型问题,我想保存另一种文件的类型,该怎么修改?
3 楼 java虫 2007-03-13  
自己选一个路径存下来,

或者在开始里搜索你那个文件.
2 楼 antonyup_2006 2006-12-27  
我想问一下 response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );设置后打开后,我要修改内容然后保存上传,但是它保存在临时文件夹的,我上传的时候就找不到了 有没有解决的办法呢?
1 楼 antonyup_2006 2006-12-27  
hao

相关推荐

    文件下载 乱码 文件损坏 打开undefind等几个坑点

    这个时候先别急着找后端,只要能下载生成想要的文件,文件打开内容是正确的都好说.下面总结几种生成导出的写法: 一. a标签点击下载 let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); let link =...

    关于文件上传与下载的实现方法总结

    ### 关于文件上传与下载的实现方法总结 在软件开发特别是Web应用开发中,文件的上传与下载是非常常见的功能需求之一。本文将详细介绍文件上传与下载的多种实现方法,并特别聚焦于通过Java语言来实现这些功能的具体...

    JS实现弹出下载对话框及常见文件类型的下载

    在给定的文件内容中,详细介绍了几个关键步骤和技术细节: 1. 实现文件下载的基本原理和步骤: - 首先生成一个指向所需下载文件的URL。对于静态文件,这个URL通常是文件服务器上的一个固定路径;对于动态生成的...

    Java文件下载,Java文件下载中文乱码,Java通用文件下载

    总结一下,Java文件下载主要涉及以下几个关键点: 1. 设置Content-Disposition头,包括对中文文件名的URL编码。 2. 设置Content-Type头,根据文件类型选择合适的值。 3. 使用FileInputStream读取文件,...

    大文件不能打开,打开慢解决的工具,几个G的sql文件秒打开

    本文将围绕“大文件不能打开,打开慢解决的工具,几个G的sql文件秒打开”这一主题,深入探讨EmEditor这一高效文本编辑器,并介绍如何使用它来快速打开大型SQL文件。 EmEditor是一款强大的、专为处理大型文件设计的...

    python使用selenium实现批量文件下载

    在实现过程中可能会遇到以下几个问题: 1. **特殊文件的处理**:例如`.DS_Store`(Mac系统)或`thumbs.db`(Windows)。 2. **新文件的识别**:需过滤掉非文件类型,如子文件夹。 3. **文件名冲突**:确保文件名...

    Wpf下载网络文件到本地指定路径(简单示例)

    这通常涉及到以下几个步骤: 1. **创建网络请求**:在C#中,我们可以使用`HttpClient`类来发起HTTP请求,获取网络上的文件。`HttpClient`提供了异步方法,如`GetAsync()`,可以在后台线程中执行,避免阻塞UI线程。 ...

    上传文件至数据库并下载

    总结来说,上传文件到数据库和下载的过程主要涉及以下几点: 1. 数据库表设计,包括选择合适的二进制数据类型字段。 2. 使用前端文件上传控件,以二进制形式上传文件,并保存在数据库中。 3. 制作报表模板,包括...

    JavaScript 用fetch 实现异步下载文件功能

    上述步骤中,涉及到的几个关键点如下: - 使用`res.headers.get('Content-Disposition')`获取响应头中的文件名,这需要服务器在发送响应时正确设置。 - 使用`window.URL.createObjectURL(blob)`创建一个指向blob...

    c#传递url下载文件

    这个过程通常涉及到以下几个步骤: 1. 获取文件的URL。 2. 发送HTTP请求获取文件数据。 3. 将文件数据写入响应流中,以便客户端能够下载该文件。 #### 二、关键技术点分析 ##### 2.1 使用HTTP请求获取文件 要从...

    DelphiXE10开发Http下载大文件的例子

    在这个例子中,可能会有以下几个关键组件: 1. `TButton`:用于开始和停止下载。 2. ` TLabel `:显示下载速度和进度。 3. ` TProgressBar `:表示下载进度。 4. ` TEdit `:用户输入URL。 5. ` TSaveDialog `:让...

    VB.NET可以很容易实现多文件多线程同时下载

    在VB.NET中实现多文件多线程下载的关键在于以下几个方面: 1. **下载类的设计**:创建一个包含下载逻辑的类,用于封装具体的下载行为。 2. **线程管理**:利用`System.Threading.Thread`类创建多个线程,每个线程...

    几个ico图标文件美化版(QQ)

    "几个ico图标文件美化版(QQ)"这个压缩包提供了一些经过设计美化,适合用于QQ相关主题或项目的ico图标。 ico图标文件的制作过程涉及到图像处理和图形设计技术。设计师通常会使用专业图像编辑软件,如Adobe Photo...

    主机上传and下载文件

    在开始之前,我们需要了解几个基本概念: 1. **主机(Host)**:通常指用于存储数据和服务的计算机系统。 2. **上传(Upload)**:将本地计算机上的文件发送到远程服务器或主机的过程。 3. **下载(Download)**:从远程...

    演示把几个文件打包成一个文件并且释放

    对于"演示把几个文件打包成一个文件",在Delphi中,一个简单的步骤可能如下: 1. 首先,创建一个新的Zip文件。 2. 然后,遍历需要打包的文件列表,逐个读取文件内容。 3. 使用Zip API将每个文件的内容写入到Zip文件...

    webupload上传与下载文件,web实现文件上传下载,Java

    WebUploader的使用主要包括以下几个步骤: 1. 初始化:在HTML中创建一个容器,然后通过JavaScript设置配置项,如上传地址、文件类型限制等。 2. 事件监听:绑定各种事件处理器,如onFileQueued(文件加入队列)、...

    JSP下载文件源代码

    这主要包括以下几个方面的内容:理解JSP与SmartUpload的基本概念、解析提供的代码示例、以及深入探讨SmartUpload中的关键方法。 ### JSP与SmartUpload简介 #### JSP (JavaServer Pages) JSP是一种基于Java技术的...

    Python-HTTP大文件多线程下载工具支持断点续传

    总结来说,"Python-HTTP大文件多线程下载工具支持断点续传"是一个结合了HTTP通信、多线程编程和文件操作的实例,对于提升Python网络编程能力,尤其是处理大文件下载问题,具有很高的学习价值。通过深入研究和实践,...

    structs文件上传下载

    为了确保文件上传的安全性,开发者需要关注以下几个方面: 1. **大小限制**:为了避免DoS攻击或过度消耗服务器资源,应设置上传文件大小的限制。 2. **文件类型检查**:只允许特定类型的文件上传,防止恶意代码的...

    C++ 的各种文件读写操作总结

    ### C++ 的各种文件读写操作总结 #### 一、基于C的文件操作 在C++编程中,尤其是在使用C++Builder这样的开发环境中,文件操作是一项非常基础且频繁使用的技能。本文将详细介绍几种不同的文件操作方法,包括基于...

Global site tag (gtag.js) - Google Analytics