`
Dxx23
  • 浏览: 142604 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

以流的方式下载附件

 
阅读更多
<a onclick="downloadFile(filePath)" href="#">(下载)</a>
<iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe>


function downloadFile(filePath){
    var fileName=encodeURI(filePath);
    document.getElementById("hidden_frame").src = "JS/StreetMap/downloadFile.jsp?fileName="+fileName;
}


public void downloadFile() {
		HttpServletResponse response = ServletActionContext.getResponse();
		HttpServletRequest request = getRequest();
		response.setCharacterEncoding("GBK");
		String fileUrl=request.getParameter("fileUrl");
		String fileName=request.getParameter("fileName");
		String cmsAttachRealFile = "";
		try {
			fileUrl = new String(fileUrl.getBytes("ISO8859-1"),"GBK");		
		cmsAttachRealFile = FilePathSptUtil.UPLOAD_ROOT_PATH
		//+ FilePathSptUtil.UPLOAD_CMS
		+ fileUrl;
		fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8"); 
		fileName = URLEncoder.encode(fileName, "UTF-8");
		} catch (Exception e1) {
			// TODO 附件流下载  弹出下载框
			e1.printStackTrace();
		}
		try {
			OutputStream o = response.getOutputStream();
			byte b[] = new byte[500];
			File fileLoad = new File(cmsAttachRealFile);
			response.setContentType("application/octet-stream");
			response.setHeader("content-disposition",
					"attachment; filename=\""
					+ fileName + "\"");
			long fileLength = fileLoad.length();
			String length1 = String.valueOf(fileLength);
			response.setHeader("Content_Length", length1);
			FileInputStream in = new FileInputStream(fileLoad);
			int n;
			while ((n = in.read(b)) != -1) {
				o.write(b, 0, n);
			}
			in.close();
			o.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}



//jsp
response.setCharacterEncoding("UTF-8");
    String fileName=request.getParameter("fileName");
    String applicationPath = application.getRealPath("");
    String filePath =applicationPath;
    String suffixName = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()).toLowerCase();
    String realFilePath = "";
    try {
//        fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
        realFilePath = filePath+fileName;//附件地址
        File fileLoad = new File(realFilePath);
        if(!fileLoad.exists()){
            System.out.println("没有您要打开的文件");
        }else {
//            fileName = URLEncoder.encode(fileName, "UTF-8");
            String realFileName = fileName.substring(fileName.lastIndexOf("/")+1,fileName.length());
            realFileName = URLEncoder.encode(realFileName, "UTF-8");
            OutputStream o = response.getOutputStream();
            byte b[] = new byte[512];
            //contentType设定
            String contentType = ZipUtil.getContentType(suffixName);
            response.setContentType(contentType);
            response.setContentType("application/octet-stream");
            //attachment表示网页会出现保存、打开对话框;inline 直接页面打开
            response.setHeader("content-disposition","attachment; filename=\"" + realFileName + "\"");
            //response.setHeader("content-disposition","inline; filename=\"" + fileName + "\"");
            long fileLength = fileLoad.length();
            String length1 = String.valueOf(fileLength);
            response.setHeader("Content_Length", length1);
            FileInputStream in = new FileInputStream(fileLoad);
            int n;
            while ((n = in.read(b)) != -1) {
                o.write(b, 0, n);
            }
            in.close();
            o.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }



分享到:
评论

相关推荐

    (完整版)Java-Web以流方式下载文件时的HTTP头设置.doc

    在Java Web开发中,以流方式下载文件是一种常见的需求,特别是在处理大文件或者需要提高性能的情况下。这个过程涉及到的关键技术点主要包括HTTP响应头的设置,尤其是`Content-Disposition`和`Content-Type`字段的...

    以数据流方式下载文件.

    数据流方式下载是一种高效且灵活的文件下载技术,尤其在处理大文件或网络带宽有限的情况下,它能显著提升用户体验。在IT行业中,理解和掌握数据流的原理与应用至关重要。 首先,我们需要理解“数据流”(DataStream...

    输入流输出流方式的文件上传下载

    ### 输入流输出流方式的文件上传下载 在Java Web开发中,经常需要处理文件的上传与下载功能。本文将深入探讨使用输入流(`InputStream`)与输出流(`OutputStream`)来实现文件的上传与下载的技术细节。这种方式...

    ASP.NET(C#) Web Api通过文件流下载文件的实例

    ` 这样设置会告诉浏览器这是一个附件,应当以下载的方式处理,而不是在浏览器中显示。`FileName`属性指定了下载时的文件名。 7. 返回响应:`return response;` 最后,控制器返回这个响应消息,当客户端收到这个响应...

    struts 流方式下载文件

    客户下载文件时服务器直接把数据库中得到的二进制数据传到客户端

    Struts2文件流方式导出下载excel、Txt、image图片

    通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...

    java IO流方式上传下载文件,源代码

    同时,需要设置响应头,如`Content-Disposition`来指示浏览器以附件形式下载文件,以及`Content-Type`来指定文件的MIME类型。 3. **`uploadDRFile.jsp`分析**: 这个JSP文件很可能是处理文件上传的入口点。它可能...

    将文件上传、下载(以二进制流保存到数据库)实现代码

    在讨论如何将文件上传、下载并以二进制流的方式保存到数据库中时,首先需要了解几个关键概念:文件上传、文件下载、二进制流以及数据库操作。 文件上传通常指的是将本地或者网络上的文件通过网络上传到服务器。在...

    .net文件流下载程序(附件授权下载用)

    在.net IIS禁止浏览器访问文档附件(如doc、xls、rar、pdf)时,在web服务器上通过物理地址以文件流方式下载附件,以保护office文档等不被通过地址栏直接非法下载。 用法:downatt.aspx?file=附件路径(如:...

    java 使用流下载文件

    设置响应头,指示浏览器以附件形式下载文件,并指定文件名: ```java response.addHeader("Content-Disposition", "attachment;filename=" + new String(zipName.getBytes())); ``` 这里需要注意的是,由于文件名...

    php文件流下载.txt

    根据提供的文件信息,我们可以深入探讨PHP文件流下载的相关知识点,包括其原理、实现方式以及应用场景等。 ### PHP文件流下载的基本概念 文件流下载是指在Web应用中将服务器上的文件发送到客户端(如浏览器),供...

    服务器下载文件方式

    服务器下载文件方式,支持文件流方式下载,WriteFile分片方式下载

    上传附件以二进制流的方式到数据库

    标题“上传附件以二进制流的方式到数据库”涉及的技术点主要包括二进制流的理解、数据库设计以及文件上传和下载的实现。 一、二进制流 二进制流是计算机处理数据的一种形式,它将任何类型的数据(如文本、图像、...

    Java文件下载的几种方式

    设置HTTP响应头,告知浏览器以附件形式下载,并指定文件名和文件大小。最后,通过`BufferedOutputStream`将字节数组写入到HTTP响应中,完成文件的下载。 #### 2. 网络文件下载 网络文件下载涉及从网络资源读取文件...

    C# 四种实现文件下载

    本文将介绍四种使用 C# 实现文件下载的方法,分别是使用 TransmitFile、WriteFile、WriteFile 分块下载和流方式下载。这些方法可以满足不同的下载需求,以下是每种方法的详细介绍: 一、TransmitFile 实现下载 ...

    用流的方式进行上传下载

    在IT行业中,流(Stream)是一种处理数据的基本方式,它允许我们高效地读取和写入大量数据,而无需一次性加载整个文件到内存中。在上传和下载文件时,使用流可以显著减少内存消耗,提高程序的性能和稳定性,特别是在...

    上传下载二进制流文件

    本教程将深入探讨如何使用C#以二进制流的形式处理文件的上传和下载,这是一种高效且灵活的方法。 首先,理解“二进制流”(Binary Stream)的概念至关重要。在计算机系统中,所有数据最终都以二进制形式存储和传输...

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

    字节流是指以字节为单位来处理文件输入输出的流。我们使用InputStream和OutputStream来读取和写入文件。 Servlet Servlet是Java语言中用于处理Web请求的API。它提供了多种方式来处理Web请求,包括GET、POST、PUT、...

    精讲RestTemplate文件上传下载与大文件流式下载.docx

    对于大文件的下载,推荐采用流式下载的方式,以避免内存溢出的问题。流式下载的关键在于: 1. **设置请求头**:请求头中的`Accept`字段应该设置为`application/octet-stream`,表明客户端希望以二进制流的形式接收...

    C# WPF 下载网络文件、流到指定目录,支持选择目标目录进行存储,可实时查看文件下载进度

    使用`GetStreamAsync`方法获取文件的流,然后使用`FileStream`将数据写入本地文件。 ```csharp using (var response = await client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead)) using ...

Global site tag (gtag.js) - Google Analytics