php中使用head进行二进制流输出,让用户下载PDF等附件的方法
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等附件的方法的更多相关文章
- CAD把控件图形变成二进制流输出(com接口VB语言)
主要用到函数说明: _DMxDrawX::WriteBinStream 把控件图形变成二进制流输出,详细说明如下: 参数 说明 VARIANT* pVarBinArray 输出二进制数组.是个byte ...
- php读取图片成二进制流输出
header( "Content-type: image/jpeg");$PSize = filesize('1.jpg');$picturedata = fread(fopen( ...
- django提供二进制流数据文件的下载
基于djnago框架的二进制流数据传输(提供较大文件的下载) (1)数据源: 高质量图片.视频.音频.文件.数据库数据等.如果是数据库文件,需要先读取相应的数据,然后写入表格在传输到前端以供下载! ( ...
- net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- java处理金证中登查询图片二进制流问题
package com.szkingdom.kess.model; import java.io.File; import java.io.FileOutputStream; import java. ...
- java Excel文件流输出(后台)没有下载提示
/**方案: *1. *问题源头应该是前端用的是ajax方式请求路径,要想出现下载Excel的弹窗,我个人理解应该是等同于重新打开一个窗口,而ajax默认不动页面直接将值返回,所以没有提升下载. *解 ...
- DirectX11 With Windows SDK--16 流输出阶段
前言 在上一章,我们知道了如何使用几何着色器来重新组装图元,比如从一个三角形分裂成三个三角形.但是为了实现更高阶的分形,我们必须要从几何着色器拿到输出的顶点.这里我们可以使用可选的流输出阶段来拿到顶点 ...
- Java生成二进制文件与Postman以二进制流的形式发送请求
业务描述: 模拟终端(智能家居)发送HTTP POST请求,请求参数为二进制流:而且,二进制流是加密后的数据,因此调试分两步: 1.Java代码生成加密后数据,并保存为二进制流文件 (电脑上的图片就是 ...
- ASP.NET 实现Base64文件流下载PDF
因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上,具体地址忘记了. //Base64文件流 byte[] buffer = Convert.FromBa ...
随机推荐
- java环境配置教程jde,jre
控制面板--所有控制面板项--系统--高级系统设置--环境变量 JAVA_HOME = D:\java\jdk CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\li ...
- IOC的总结
今天趁着空闲总结一下自己IOC的一些理解,希望可以帮助到有需要的人,请大牛们多多指教. (一)IOC IOC就是控制反转,给程序解耦等等,有很多博客都对它做了一些很好的讲解.在这里我也不说太多文字,直 ...
- [Android游戏开发]游戏框架的搭建
通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建.运行.暂停.恢复游戏界面等功能. 输入模块(Input):该 ...
- Tempdb总结
Tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存下列各项: 显式创建的临时用户对象,例如全局或局部临时表.临时存储过程.表变量或游标. SQL ...
- 分布式文件系统FastDFS详解
上一篇文章<一次FastDFS并发问题的排查经历>介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件. 为什么要使用分布式 ...
- 《Python cookbook》 “定义一个属性可由用户修改的装饰器” 笔记
看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代 ...
- [js高手之路] vue系列教程 - 绑定设置属性的多种方式(5)
一.设置属性的值: {{data中的数据}} window.onload = function () { var c = new Vue({ el : '#box', data : { url : ' ...
- android应用开发基础知道
1.理解android linux是由c语言和汇编语言写的操作系统,android是基于linux内核的操作系统.发者可以使用Java或C/C++开发Android应用. 2.android环境搭建 ...
- Java学习笔记5(类的入门以及ArrayList)
1.类的概念:将现实生活中的事物抽象成了代码(类),我们可以使用自定义的数组类型(类)来描述现实生活中的事物. 2.分析:用一部手机来分析,手机可以打电话,上网,听音乐,这些就是方法,手机有型号,颜色 ...
- mimtproxy和arpspoof实现局域网MITM
本地环境 环境:kali系统 目标机器:192.168.0.101 局域网网关:192.168.0.1 当前网络网卡端口:wlan0 arp欺骗流程 命令行开启本地数据转发: echo > /p ...