PHP中文名文件下载实现
php下载文件的流程:
其实就是给予一个链接: <a href="指向处理文件的地址"></a> 这样,当前端点击链接的时候,指向处理文件,比如download.php
本例题 在download.php同级目录下有resume.docx文件
<?php
$file_name = 'resume.docx';
$file_sub_path =$_SERVER['DOCUMENT_ROOT'].__ROOT__.'/Public/Download/';
$file_path = $file_sub_path.$file_name;
if (!file_exists($file_path)){ //判断文件是否存在
echo "文件不存在";
exit();
}
$fp = fopen($file_path,"r+") or die('打开文件错误'); //下载文件必须要将文件先打开。写入内存
$file_size = filesize($file_path);
Header("Content-type:application/octet-stream");
//按照字节格式返回
Header("Accept-Ranges:bytes");
//返回文件大小
Header("Accept-Length:".$file_size);
//弹出客户端对话框,对应的文件名
Header("Content-Disposition:attachment;filename=".$file_name);
//防止服务器瞬间压力增大,分段读取
$buffer = 1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
}
知识点:
$_SERVER['DOCUMENT_ROOT'] 服务器的根路径,比如我的电脑上是 d:wamp/www
__ROOT__是THINKPHP中的用法,指向项目的根路径,比如我的电脑是/tpblog
$file_sub_path 指向,所需要下载文件的路径 d:wamp/www/tpblog/Public/Download
但是我遇到了一个问题,就是如果文件名改成中文的话,就会出现文件不存在的错误
后来找到解决办法是
在开始申明
header("Content-type: text/html;charset=utf-8");
申明网页的编码格式
然后强制转换编码
$file_name = iconv("utf-8","gbk//IGNORE",$file_name);
把UTF-8的编码强制转换为GBK
完整代码如下:
本例题 在download.php同级目录下有测试简历.docx文件
header("Content-type: text/html;charset=utf-8");
$file_name = '测试简历.docx';
$file_name = iconv("utf-8","gbk//IGNORE",$file_name);
$file_sub_path =$_SERVER['DOCUMENT_ROOT'].__ROOT__.'/Public/Download/';
$file_path = $file_sub_path.$file_name;
if (!file_exists($file_path)){ //判断文件是否存在
echo "文件不存在";
exit();
}
$fp = fopen($file_path,"r+") or die('打开文件错误'); //下载文件必须要将文件先打开。写入内存
$file_size = filesize($file_path);
//返回的文件流
Header("Content-type:application/octet-stream");
//按照字节格式返回
Header("Accept-Ranges:bytes");
//返回文件大小
Header("Accept-Length:".$file_size);
//弹出客户端对话框,对应的文件名
Header("Content-Disposition:attachment;filename=".$file_name);
//防止服务器瞬间压力增大,分段读取
$buffer = 1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
PHP中文名文件下载实现的更多相关文章
- 解决FTP服务器上中文名文件下载后为空的问题
转: 解决FTP服务器上中文名文件下载后为空的问题 2017年07月20日 15:19:21 代码的寂寞 阅读数 2428 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- Aspose.Cells导出Excel(2)
DataTable dtTitle = ds.Tables[]; DataTable dtDetail = ds.Tables[]; int columns = dtTitle.Columns.Cou ...
- Aspose.Cells导出Excel(1)
利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...
- ServletContext对象
**1 ServletContext对象 1)在web应用中,由服务器创建的唯一的一个对象是ServletContext 2)ServletContext对象在每一个Servlet中取得都是相 ...
- Servlet入门和ServletConfig、ServletContext
Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...
- 文件下载:"Content-disposition","attachment; filename=中文名>>>解决方案
文件下载时常会出现如下问题: response.setHeader("Content-disposition","attachment; filename="+ ...
- Struts2文件下载中文名乱码
Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱 ...
- java 实现文件下载中文名不显示
需要将指定字符串的编码转换成浏览器里面的ISO-8859-1编码 String name = new String(name.getBtes("utf-8"),"ISO- ...
- java 网络文件下载(并命中文名)
public void download(HttpServletRequest request, HttpServletResponse response){ //获取服务器文件 String fil ...
随机推荐
- ABAP 锁机制
- 刀锋上前行!绕过Ramint蠕虫病毒直接脱壳
系统 : Windows xp 程序 : 某游戏客户端 程序下载地址 :不提供 要求 : 脱去压缩壳 使用工具 : OD & PEID & LordPE & Import RE ...
- Java8 Lambda表达式教程
转自:http://blog.csdn.net/ioriogami/article/details/12782141 1. 什么是λ表达式 λ表达式本质上是一个匿名方法.让我们来看下面这个例子: pu ...
- Android View各种尺寸位置相关的方法探究
Android View各种尺寸位置相关的方法探究 本来想做一个View间的碰撞检测之类的. 动手做了才发现不是想象的那么简单. 首先,写好了碰撞检测的工具类如下: package com.mengd ...
- 访客至上的Web、移动可用性设计--指导原则
文章出自:听云博客 关于可用性设计,之前写过一个“纸上谈兵”版本的,那篇帖子主要是根据A/B test的方式来进行的. 但是最近找了本Steve krug写的Don't make me think,我 ...
- 【代码笔记】iOS-判断有无网络
一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- 【Android】监听Notification被清除
前言 一般非常驻的Notification是可以被用户清除的,如果能监听被清除的事件就可以做一些事情,比如推送重新计数的问题. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www ...
- 【转发】NPAPI学习(Firefox和Chrome扩展开发 )
NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...
- Rac grid用户启停监听报错无权限
[grid@max1 ~]$ lsnrctl stop LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-NOV-2016 00:20: ...
- mydumper 安装报错处理
mydumper 官网:https://launchpad.net/mydumper 下载之后,安装报错: [root@localhost local]# cd mydumper-0.6.2 [roo ...