php上传文件和下载文件,PHP文件上传与下载

PHP文件上传与下载

/*

PHP文件上传与下载

1、将文件上传至服务器,获取文件及文件名、文件大小等

2、将文件名、大小等存入数据库中,再随机生成一个新文件名存入系统

3、下载时通过数据库获取文件的原名及路径,动态读取并推送到浏览器提供下载

4、这样没有文件路径,不会被盗下。

*/

public function uploadSorft(){

//p($_POST);

//p($_FILES);

$file = $_FILES['file']['tmp_name']; //接收上传的文件

if (empty ($file)) {echo '请选择要上传文件!';return; }

$filename=$_FILES['file']['name'];

$newname=rand(10000,20000);//生成一个10000到20000的随机数,作为新文件的名称

$filePath=ROOT_PATH.DS.'uploadFold';

while(true){ // 检查文件名是否重复,如果重复就再重新生成一个

if(!file_exists($filePath.DS.$newname)){

break;

}else{

$newname=rand(10,15);

}

}

$filePath=$filePath.DS.$newname;

copy($file,$filePath);//将临时文件复制到指定目录

$name=trim($_POST['name']);

$kind=trim($_POST['kind']);

$os=trim($_POST['os']);

$miaosh=trim($_POST['miaosh']);

$Dbkind=Db::table('sorftKind')->where('name',$kind)->count('id');

if($Dbkind < 1){

Db::table('sorftKind')->insert(['name'=>$kind]);

}

$kind=Db::table('sorftKind')->where('name',$kind)->first()['id'];

$Dbos=Db::table('os')->where('name',$os)->count('id');

if($Dbos < 1){

Db::table('os')->insert(['name'=>$os]);

}

$os=Db::table('os')->where('name',$os)->first()['id'];

$back=Db::table('download')->insert(['name'=>$name,'fileName'=>$filename,'kind_id'=>$kind,'os_id'=>$os,'miaosh'=>$miaosh,'filePath'=>$filePath]);

//if($back){echo 'true';}else{echo 'false';}

go("jk/index/uploadSorft");

exit();

}

public function downLoad(){

$sorftArr=$sorft=Db::table('download')->where('id',$_GET['id'])->first();

$fp=fopen($sorftArr['filePath'],"r");

$file_size=filesize($sorftArr['filePath']);

header("Content-type:application/octet-stream");

header("Accept-ranges:bytes");

header("Accept-length:$file_size");

header("Content-Disposition:attachment;filename=".$sorftArr['fileName']);

$buffer=1024;

$file_count=0;

while (!feof($fp)&&$file_size-$file_count>0) {

$file_data=fread($fp,$buffer);

$file_count+=$buffer;

echo $file_data;

}

fclose($fp);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值