http://blog.csdn.net/jallin2001/article/details/6872951

PHP的手册中,有如下的方法,可以让用户方便的下载pdf或者其他类似的附件形式,不过这里居然涉及到了编码的问题,

是这样的,我要传输一个pdf附件给用户,首先是pdf文件已经存放到服务器上面了,在给文件传输过程中取名的问题,总是

在IE下面到用户端的时候,文件名是乱码,导致了文件类型无法识别,有点奇怪,文件名是UTF-8编码的,比如:“中国人.pdf”,

是从数据库中获取出来的,输出转化为$filename =
iconv('utf-8', 'gbk', $filename);,传递到用户端的时候,文件名

就正常了,这个有点稍微有点想不通。

function downloadFile( $fullPath ){

// Must
be fresh start 

  if( headers_sent()


   
die('Headers
Sent');

//
Required for some browsers 

  if(ini_get('zlib.output_compression'))

ini_set('zlib.output_compression', 'Off');

// File
Exists? 

  if( file_exists($fullPath)
){

// Parse
Info / Get Extension 

    $fsize = filesize($fullPath);

$path_parts = pathinfo($fullPath);

$ext = strtolower($path_parts["extension"]);

//
Determine Content Type 

    switch
($ext)


  
  
case "pdf": $ctype="application/pdf";
break; 

  
  
case "exe": $ctype="application/octet-stream";
break; 

  
  
case "zip": $ctype="application/zip";
break; 

  
  
case "doc": $ctype="application/msword";
break; 

  
  
case "xls": $ctype="application/vnd.ms-excel";
break; 

  
  
case "ppt": $ctype="application/vnd.ms-powerpoint";
break; 

  
  
case "gif": $ctype="image/gif";
break; 

  
  
case "png": $ctype="image/png";
break; 

  
  
case "jpeg":

case "jpg": $ctype="image/jpg";
break; 

  
  
default: $ctype="application/force-download";





    header("Pragma:
public"); //
required 

    header("Expires:
0");

header("Cache-Control:
must-revalidate, post-check=0, pre-check=0");

header("Cache-Control:
private",false); //
required for certain browsers 

    header("Content-Type:
$ctype");

header("Content-Disposition:
attachment; filename=\"".basename($fullPath)."\";" );

header("Content-Transfer-Encoding:
binary");

header("Content-Length:
".$fsize);

ob_clean();

flush();

readfile( $fullPath );

} else 

   
die('File Not
Found');

}

原先

原先比如文件名是UTF-8的,我想通过header("Content-Type:
$ctype;charset=UTF-8");告诉服务器 采用UTF-8进行输出,

结果文件名还是乱码,下次关注下这个问题的原因。

php中使用head进行二进制流输出,让用户下载PDF等附件的方法的更多相关文章

  1. CAD把控件图形变成二进制流输出(com接口VB语言)

    主要用到函数说明: _DMxDrawX::WriteBinStream 把控件图形变成二进制流输出,详细说明如下: 参数 说明 VARIANT* pVarBinArray 输出二进制数组.是个byte ...

  2. php读取图片成二进制流输出

    header( "Content-type: image/jpeg");$PSize = filesize('1.jpg');$picturedata = fread(fopen( ...

  3. django提供二进制流数据文件的下载

    基于djnago框架的二进制流数据传输(提供较大文件的下载) (1)数据源: 高质量图片.视频.音频.文件.数据库数据等.如果是数据库文件,需要先读取相应的数据,然后写入表格在传输到前端以供下载! ( ...

  4. net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  5. java处理金证中登查询图片二进制流问题

    package com.szkingdom.kess.model; import java.io.File; import java.io.FileOutputStream; import java. ...

  6. java Excel文件流输出(后台)没有下载提示

    /**方案: *1. *问题源头应该是前端用的是ajax方式请求路径,要想出现下载Excel的弹窗,我个人理解应该是等同于重新打开一个窗口,而ajax默认不动页面直接将值返回,所以没有提升下载. *解 ...

  7. DirectX11 With Windows SDK--16 流输出阶段

    前言 在上一章,我们知道了如何使用几何着色器来重新组装图元,比如从一个三角形分裂成三个三角形.但是为了实现更高阶的分形,我们必须要从几何着色器拿到输出的顶点.这里我们可以使用可选的流输出阶段来拿到顶点 ...

  8. Java生成二进制文件与Postman以二进制流的形式发送请求

    业务描述: 模拟终端(智能家居)发送HTTP POST请求,请求参数为二进制流:而且,二进制流是加密后的数据,因此调试分两步: 1.Java代码生成加密后数据,并保存为二进制流文件 (电脑上的图片就是 ...

  9. ASP.NET 实现Base64文件流下载PDF

    因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上,具体地址忘记了. //Base64文件流 byte[] buffer = Convert.FromBa ...

随机推荐

  1. Android模拟器

    一.Genymotion 1.下载安装:https://www.genymotion.com/download/  (注:安装前需要先注册) 因为Genymotion运行需要VirtualBox,如果 ...

  2. Python安装和开发环境搭建

    1.官网:http://www.python.org/download/下载安装包,目前最新版本为3.6,安装包很多地方可以下,也可以在360软件管家上下载安装  特别要注意勾选:Add Python ...

  3. csv文件转json

    http://stackoverflow.com/questions/19766266/directly-convert-csv-file-to-json-file-using-the-jackson ...

  4. c3p0使用记录

    首先要导入c3p0包.c3p0下载解压后,lib目录下有三个包,使用mysql的话,只需要导入c3p0-0.9.5.2.jar,mchange-commons-java-0.2.11.jar. 要连接 ...

  5. 微信小程序开发之picker

    一.绑定简单数组 通过bindChange控制index,使得当前选择值发生改变 示例1 data: { Data: ['A','B'], Index: 0, }, <picker class= ...

  6. HTML、CSS、JS 复习——序

    HTML在MVC中担任着M的角色.由HTML组成的节点称之为HTML DOM.要想成为一流的大神,就必须能分分钟建立起一个强大的HTML DOM.而要做到这点,就必须了解甚至精通HTML. CSS在M ...

  7. angular4.0项目文件解读

    这篇文章我觉得是很有用的,便于我们对ng项目的理解,同时在配置项目时,也能够很快的定位到相应文件. 摘录的别人的文章,首先感谢那个路人兄弟,下面就开始学习吧. File 文件 Purpose 用途 e ...

  8. css动画-音频跳动

    css动画-音频跳动 ---------------------------------------------------------------------------- ------------ ...

  9. PE格式详解讲解1

    这篇文章主要转载自小甲鱼的加密解密部分,然后补充加上我自己的少许内容,原文地址–>传送门 下面的内容主要是围绕这个图来进行 MS-DOS头部 这个头部是为了兼容早期的DOS系统,PE文件的第一个 ...

  10. 使用Xamarin实现跨平台移动应用开发(转载)

    刚在朋友圈看到张善友,转发的一条分享“使用Xamarin实现跨平台移动应用开发”,写的确实很详细得体,从收费到开源,这段时间xamarin受到不少质疑,如此文http://blog.csdn.net/ ...