本人是一个新手代码狗,第一次发表博客,欢迎大大们指点!

最近手头有一个文件上传下载的案例,跟大家一起分享一下作为一个新手的苦逼成长历程!

话不多说,先上代码:

一:这个是一个文件上传的html页面,小博做的是上传图片(gif、png和jpg格式,200KB以内);

初稿做的是单一上传,后来改成的批量上传,在input中将name的名字从file改成file[],然后加上multiple=“multiple”就可以了(选择上传文件时可以使用鼠标或者键盘进行批量选择);

其实一开始小博是傻傻的用了N个input框进行上传的!= =。

二:图片的后台处理;

{mkdir("./pic");

}$file=$_FILES['file'];//获取传输文件数组;

foreach($file["name"] as $valuename){ //遍历文件['name数组'];得到字符串:1.png.2.png.3.png.;

$value.=$valuename.".";

};$strr=substr($value,0,strlen($value)-1); //字符串更新:1.png.2.png.3.png(去掉最后一个.);

$strarr=explode(".", $strr); //获得数组如:arr(1,png,2,png,3,png,4,png);

$filetypearr=[];foreach($strarr as $key=>$valuea){if($valuea!=""){ //去掉上传过来的空值;

if($key%2!=0){$filetypearr[]=$valuea; //获得新数组,如:arr(png,png,png);

}

}

}$typearr=array("png","jpg","gif"); //可上传类型数组

function checktype($typearr,$type){ //判断类型方法;

foreach($typearr as $value){if($value==$type){return true;

}

}return false;

}foreach($filetypearr as $key=>$valueb){ //判断格式类型是否正确;

if(!checktype($typearr,$valueb)){echo "";header("Refresh:0.1;url=piliangfile.html");exit;

}

}for($i=0;$i1024*200){ //判断文件大小是否符合,如果文件过大会提示该文件,符合的文件会继续上传,不符合的文件不上传;

echo "";header("Refresh:0.1;url=picscan.php");

}else{ //存储文件,并跳转到文件展示页面;

move_uploaded_file($file['tmp_name'][$i], "pic/".$file["name"][$i]);header("Refresh:0.1;url=picscan.php");

}

}?>

小博在实际过程中对于文件名符合类型但是大小过大的文件实行拦截,其他符合的会先一步上传。(但是如果上传的文件类型中有不符合的,批量上传会中断,没有文件上传);

三:文件展示页面(主页面)

ini_set('date.timezone','Asia/Shanghai'); //时区设置,东八区上海时间;

function format_bytes($size) { //文件大小转换方法(字节转换为KB,MB,GB,TB);

$units = array(' B', ' KB', ' MB', ' GB', ' TB');for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;return round($size, 2).$units[$i];

}?>

序号 文件名 图片 大小 最后修改时间 全选

<?phpforeach ($picarr as $key=>$value){if($key>1){ //去掉前面的两个空值;

echo "

";echo "".($key-1).""; //序号

echo "

".$value.""; //文件名

echo "

"; //图片

echo "

".format_bytes(filesize("pic/$value")).""; //filesize 获取文件大小(单位:B);

echo "

".date("Y-m-d H:i:s", filemtime("pic/$value")).""; //filemtime 获取文件最后修改时间(单位:毫秒) date转换时间

echo "

"; //多选框传值(传的是文件名)

echo "

";

}

}?>

function chooseall(str){ //全选方法

var cholen=document.getElementsByName('del[]').length;for(i=0;i<=cholen;i++){

document.getElementsByName('del[]')[i].checked=str;

}

}

document.getElementById("all").οnclick=function(){ //全选事件

if(this.checked==true){

chooseall(true);

}else{

chooseall(false);

}

}

四:删除与下载后台处理页面

$picname=$_POST['del'];foreach($picname as $value){unlink("pic/$value"); //删除对应的文件;

}

}else if($_REQUEST['download']){$picname=$_POST['del'];if($picname!=''){ //去掉空值的情况(没有选中任何项,无表单传值)

foreach($picname as $value){if(!file_exists("pic/$value")){ //没有该文件时无法下载;

echo "";header("location:picscan.php");

}else{$fp=fopen("pic/$value","r"); //打开文件指针;

$file_size=filesize("pic/$value"); //文件的大小;

Header("Content-type: application/octet-stream"); //告知浏览器下载的文件类型;

Header("Accept-Ranges: bytes"); //返回的文件大小按照字节计算;

Header("Accept-Length:".$file_size); //返回的文件大小;

Header("Content-Disposition: attachment; filename=".$value); //返回的文件的名称;

$buffer=1024;$file_count=0;while(!feof($fp) && $file_count

}fclose($fp);

}

}

}

}elseif ($_REQUEST['downloadall'] ) { //一个表单多个提交按钮,区分提交按钮的name值;

$picname=$_POST['del'];if($picname!=''){ //去掉空值的情况(没有选中任何项,无表单传值)

$filename = "pic/download.zip"; //最终生成的文件名(含路径)

if(!file_exists($filename)){ //重新生成文件

$zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {exit('无法打开文件,或者文件创建失败');

}foreach( $picname as $val){if(file_exists("pic/$val")){$zip->addFile( "pic/$val", basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下

}

}$zip->close();//关闭

}if(!file_exists($filename)){exit("无法找到文件"); //即使创建,仍有可能失败。。。。

}header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($filename)); //文件名

header("Content-Type: application/zip"); //zip格式的

header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件

header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小

@readfile($filename);unlink($filename);

}

}header("location:picscan.php");?>

还有好几个功能没有实现(文件的排序,中文文件名的转码等,涉及到批量上传下载,中文转码老是报错,如果有哪位大神有空,还请指点一二),慢慢摸索中......

kingedit 上传php_php文件上传下载实例(实现最简单的网盘功能)相关推荐

  1. 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...

    今天有朋友在群里问会员账号,上次好像说过,这种公用的会员账号基本下载量都超了,同样也限速,所以这种账号一般都用来找资源. 百度网盘这个题材也来回来去发过好几个工具了,太麻烦不说,老这么道高一尺魔高一丈 ...

  2. 2021-5-24星期一,上海诚通网盘,一款收益高。分享文件有人下载就会提供收益的网盘!

    诚通网盘,一款高收益.双方互赢的网盘!以我这个网盘小号为例,我用了这个网盘以后,分享文件全部都用这个网盘,不管是发视频发游戏发教程发PPT模板,我都是用这个网盘分享的,追剧追番我也用这个网盘分享,已经 ...

  3. java文件上传_Java文件上传细讲

    什么是文件上传? 文件上传就是把用户的信息保存起来. 为什么需要文件上传? 在用户注册的时候,可能需要用户提交照片.那么这张照片就应该要进行保存. 上传组件(工具) 为什么我们要使用上传工具? 为啥我 ...

  4. 图片和视频的上传(文件上传通用)

    流程如下: 1.先引入el-upload 2.调用上传前事件 3.上传前事件中将file文件转formData 4.调用后端oss接口上传文件 5.上传完成后回显数据 6.点击图片/视频预览 图片和视 ...

  5. php 超过100m文件上传,科技常识:apache+php上传大文件以上传100M为例

    科技常识:apache+php上传大文件以上传100M为例 2021-03-19 18:54:57 今天小编跟大家讲解下有关apache+php上传大文件以上传100M为例 ,相信小伙伴们对这个话题应 ...

  6. java 图片上传_java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下. 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多 ...

  7. java web文件上传详解_java web图片上传和文件上传实例详解

    java web图片上传和文件上传 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定 ...

  8. 阿里云网盘和百度网盘功能体验上谁更胜一筹呢?

    阿里云网盘和百度网盘功能体验上谁更胜一筹呢? 由阿里巴巴推出的阿里云网盘即将上线,相信这对于百度网盘来说将是一个强劲的对手,会流失许多的用户.那么阿里云网盘和百度网盘哪个好?这两个网盘在功能和体验上谁 ...

  9. matlab编辑rayfile光源文件,rayfile网盘功能详解 rayfile网盘安装步骤及安装注意事项...

    rayfile网盘是一款网络硬盘文件,用户可以用它上传.下载网络资源文件,上传.下载速度快,且支持同时上传和下载多个文件,断点续传等功能,非常实用,另外还具有文件管理功能,可以通过客户端轻松管理自己已 ...

最新文章

  1. 集成、知识蒸馏和自蒸馏有区别?
  2. 【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★
  3. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型...
  4. Sticks UVA - 307(切木棍 线性区间dp,线性dp,区间思想。)
  5. 计算机二级c语言题库缩印,计算机二级C语言上机题库(可缩印做考试小抄资料)...
  6. 互联网晚报 | 11月11日 星期四 | 腾讯第三季度营收1424亿元;华为捐赠百万价值职业技能券;货拉拉成立司机权益保障委员会...
  7. 民办大学计算机专业教师,干货!民办大学和独立院校教师创新排行榜,这五个高校最亮眼...
  8. Python-Socket编程学习(11.3)
  9. mysql text字段导出_用命令创建MySQL数据库
  10. unix设置线程优先级-转
  11. Maven最新版的下载与安装教程(详细教程)
  12. 屏幕坐标转换成threejs的坐标
  13. flex blazeds java spring_flex3+blazeds+spring+hibernate整合小结
  14. SI4463研究计划(兼STM32F0进一步加深理解)
  15. ad10搜索快捷键_AD 常用快捷键
  16. UEFI开发探索101 – PCD探究
  17. 怎样用html设置文档格式,Dreamweaver使用CSS样式表设置网页文本格式
  18. 兔云资讯_游戏研发工程师面试更新_20200801
  19. linux获取时间,精确到微秒usec
  20. 达梦客户端工具的使用

热门文章

  1. 十一、jQuery的基本用法
  2. Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
  3. 使用 TypeScript 改造构建工具及测试用例
  4. kafka认知--(1)
  5. 强烈建议使用国外DNS解析域名,解决访问速度和某些访问故障!
  6. 【原生JS插件】LoadingBar页面顶部加载进度条
  7. java.util.Properties
  8. javascript --- 尾递归优化的实现
  9. vue --- 使用字符串'api'跨域请求资源
  10. YodaOS: 一个属于 Node.js 社区的操作系统