列表样式下载图片:
样例代码:
fileDownList.php //界面列表
<?php
header("Content-Type:text/html;charset='utf-8'");
?>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="./image/a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=乔彬.png">点击下载</a><img src="乔彬.png" width="70px"/><br/><br/>
中文形式的图片名称传递接收没问题。但是路径匹配不上,一直提示文件不存在不知道咋回事-目前不知道为啥 只能避免有中文图片存在
fileDownProcess.php//接收处理界面
<?php
require "fileDownService.php";
$file_name = $_REQUEST['filename'];
//echo "接收的文件名".$file_name;
downFile($file_name,"");
?>
fileDownService.php//下载方法
<?php
//1、不封装
function downFile($file_name,$file_sub_dir){
//$file_name="b.png";
//$file_name="乔彬.png";
//如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
//$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
//$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
//Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6 //这个啥意思
if(isset($file_sub_dir)){
$file_path=$file_name;
}else{
$file_path=/**"./image/"*/$file_sub_dir.$file_name;
}
$file_path=/**"./image/"*/$file_sub_dir.$file_name;
//1、打开文件
if(!file_exists($file_path)){
echo "文件不存在 输出路径 ".$file_path;
echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
return;
}
$fp=fopen($file_path,"r");
//获取下载文件的大小
$file_size=filesize($file_path);
//echo "文件的大小是".$file_size;//这个也不能有
//返回的文件
header("Content-type:application/octet-stream");
//按照字节返回
header("Accept-Ranges:bytes");
//返回这个文件大小
header("Accept-Length:$file_size");
//对应客户端弹出的对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
//向客户端回传数据
$buffer = 1024;
$file_count = 0;
//用于判断数据读取
while(!feof($fp) && $file_size-$file_count>0){
$file_count+=$buffer;
$file_data = fread($fp,$buffer);
//把部分数据回送给浏览器
//echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
echo $file_data;
}
fclose($fp);
}
//2、封装
?>
以上是下载代码未封装的
以下是封装的:
fileDownList.php
<?php
header("Content-Type:text/html;charset='utf-8'");
?>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="./image/a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=乔彬.png">点击下载</a><img src="乔彬.png" width="70px"/><br/><br/>
中文形式的图片名称传递接收没问题。但是路径匹配不上,一直提示文件不存在不知道咋回事-目前不知道为啥 只能避免有中文图片存在
fileDownProcess.php
<?php
//require "fileDownService.php";
include("fileDownService.php");//这个引入的是php文件名
$file_name = $_REQUEST['filename'];
//echo "接收的文件名".$file_name;
//1 不封装调用
//downFile($file_name,"");
//2 封装调用
$fileDownService = new fileDownService1($file_name,"");//引入php文件名之后 实例化内部的类对象
$fileDownService->downFile();//然后调用类内部方法
?>
fileDownService.php//封装的类
<?php
//1、不封装
function downFile($file_name,$file_sub_dir){
//$file_name="b.png";
//$file_name="乔彬.png";
//如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
//$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
//$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
//Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6 //这个啥意思
if(isset($file_sub_dir)){
$file_path=$file_name;
}else{
$file_path=/**"./image/"*/$file_sub_dir.$file_name;
}
$file_path=/**"./image/"*/$file_sub_dir.$file_name;
//1、打开文件
if(!file_exists($file_path)){
echo "文件不存在 输出路径 ".$file_path;
echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
return;
}
$fp=fopen($file_path,"r");
//获取下载文件的大小
$file_size=filesize($file_path);
//echo "文件的大小是".$file_size;//这个也不能有
//返回的文件
header("Content-type:application/octet-stream");
//按照字节返回
header("Accept-Ranges:bytes");
//返回这个文件大小
header("Accept-Length:$file_size");
//对应客户端弹出的对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
//向客户端回传数据
$buffer = 1024;
$file_count = 0;
//用于判断数据读取
while(!feof($fp) && $file_size-$file_count>0){
$file_count+=$buffer;
$file_data = fread($fp,$buffer);
//把部分数据回送给浏览器
//echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
echo $file_data;
}
fclose($fp);
}
//2、封装
class fileDownService{
public $file_name;
public $file_sub_dir;
public function __construct($file_name,$file_sub_dir){
$this->file_name = $file_name;
$this->file_sub_dir = $file_sub_dir;
}
public function downFile(){
//$file_name="b.png";
//$file_name="乔彬.png";
//如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
//$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
//$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
//Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6 //这个啥意思
if(isset($this->file_sub_dir)){
$file_path=$this->file_name;
}else{
$file_path=/**"./image/"*/$this->file_sub_dir.$this->file_name;
}
//$file_path=/**"./image/"*/$file_sub_dir.$file_name;
//1、打开文件
if(!file_exists($file_path)){
echo "文件不存在 输出路径 ".$file_path;
echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
return;
}
$fp=fopen($file_path,"r");
//获取下载文件的大小
$file_size=filesize($file_path);
//echo "文件的大小是".$file_size;//这个也不能有
//返回的文件
header("Content-type:application/octet-stream");
//按照字节返回
header("Accept-Ranges:bytes");
//返回这个文件大小
header("Accept-Length:$file_size");
//对应客户端弹出的对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$this->file_name);
//向客户端回传数据
$buffer = 1024;
$file_count = 0;
//用于判断数据读取
while(!feof($fp) && $file_size-$file_count>0){
$file_count+=$buffer;
$file_data = fread($fp,$buffer);
//把部分数据回送给浏览器
//echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
echo $file_data;
}
fclose($fp);
}
}
?>