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

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

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

话不多说,先上代码:

一:这个是一个文件上传的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");?>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Perl 面对对象的案例理解

晚上仔细的推敲了下大骆驼的案例&#xff0c;由于有段时间没继续看下去了&#xff0c;导致有些地方忘记了。 今天仔细的翻了下面对对象那块&#xff0c;说实话&#xff0c;认真看&#xff0c;用心看的话&#xff0c;就能看明白它写神码。 看完前面一堆的理论&#xff0c;发现一…

计算机发展与应用,网络计算机的发展与应用

网络计算机(Network Computer)&#xff0c;简称NC&#xff0c;是专用于高速网络环境下的一种计算机终端设备。它一般不需要硬盘、软驱及光驱等外部存储器&#xff0c;而是通过网络获取大部分资源&#xff0c;其所需要的应用程序和数据都存储在服务器上。NC与PC的比较随着网络技…

ASP.NET 缓存技术分析

缓存功能是大型网站设计一个很重要的部分。由数据库驱动的Web应用程序&#xff0c;如果需要改善其性能&#xff0c;最好的方法是使用缓存功能。可能的情况下尽量使用缓 存&#xff0c;从内存中返回数据的速度始终比去数据库查的速度快&#xff0c;因而可以大大提供应用程序的性…

分布式搜索 Elasticsearch —— 删除索引

为什么80%的码农都做不了架构师&#xff1f;>>> 删除索引的方式很多&#xff0c;这里列举三种。 指定 index 、type、id 执行删除 package com.gsoft.gsearch.util;import org.elasticsearch.action.get.GetResponse; import org.junit.Test;import com.gsoft.gsea…

springmvc拦截器对请求参数解密_SpringMVC拦截器如何修改请求参数

拦截器1&#xff0c;基本拦截器&#xff1a;package cn.ijava.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servle…

SQL Server 2008安装配置说明书+简单使用 亲测可用

SQL Server 2008 序列号&#xff1a;Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB 产品秘药JD8Y6-HQG69-P9H84-XDTPG-34MBB 下面只说企业版安装说明 SQL Server版本&#xff1a;SQL Server 2008 企业版。 安装Microsoft SQL Server 20…

计算机云客户端,蓝奏云网盘客户端 0.3.7电脑版

蓝奏云由于不限速、下载速度快被很多用户所欢迎&#xff0c;不过蓝奏云没有客户端&#xff0c;上传下载有时也不太方便,这里有大神写了蓝奏云网盘客户端&#xff0c;采用蓝奏云API项目使用PyQt5实现图形界面&#xff0c;蓝奏云盘API项目实现了对蓝奏网盘的基本操作: 登录、列出…

IT知识免费学习视频地址大全

Jquery2.0实战 http://edu.ibeifeng.com/view-index-id-318.html使用SSH框架技术开发学籍管理系统-Hibernate 部分http://edu.ibeifeng.com/view-index-id-319.htmlSpring 实战:使用 SSH 框架技术开发学籍管理系统http://edu.ibeifeng.com/view-index-id-320.htmlStruts 实战:使…

三十分钟学会SED

本文承接之前写的三十分钟学会AWK一文&#xff0c;在学习完AWK之后&#xff0c;趁热打铁又学习了一下SED&#xff0c;不得不说这两个工具真的堪称文本处理神器&#xff0c;谁用谁知道&#xff01;本文大部分内容依旧是翻译自Tutorialspoint上的入门教程&#xff0c;这次是 Sed …

unity实现图片轮播效果_Unity实现图片轮播组件

游戏中有时候会见到图片轮播的效果&#xff0c;那么这里就自己封装了一个&#xff0c;包括自动轮播、切页按钮控制、页码下标更新、滑动轮播、切页后的回调等等 。下面&#xff0c;先上一个简陋的gif动态效果图从图中可以看出&#xff0c;该示例包括了三张图片的轮播&#xff0…

[置顶] 2013腾讯编程马拉松初赛第4场(3月24)(HDU 4520 HDU4521 HDU4522 HDU4523 HDU4524)...

话说昨天比赛终于拿到一个不错的名次&#xff0c;rank77&#xff0c;对于我们这种ACM弱菜的学校来说已经很好了&#xff0c;可惜我1003用了俩floyd超时&#xff0c;如果我最近稍微搞搞图论的话&#xff0c;用个bellman&#xff0c;或者SPFA&#xff0c;绝对超不了了就。。。哎。…

计算机学院年会,重庆大学计算机学院举行2019年迎新晚会

2019年12月6号晚&#xff0c;重庆大学计算机学院2019年迎新晚会在兰园小剧场举行。出席本次晚会的嘉宾有计算机学院党委副书记兼纪委书记郭坤银、党委组织员刘霜、2016级辅导员李若菡老师、2017级辅导员古曦老师、2018级辅导员郑田青老师、2019级辅导员谢璧如老师。本次晚会的主…

[转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程

看了opengles有一段时间了&#xff0c;算是了解了一下下。然后&#xff0c;就在基本要决定还是回归cocos2dx 3.2的&#xff0c;看了这篇好文章&#xff0c;欣喜转之~ 推荐看原帖&#xff1a; Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程 最近几天&#xff0c;我都…

省赛热身赛之Median

原题&#xff1a; Description A median is described as the numeric value separating the higher half of a list, from the lower half. The median of a finite list of numbers can be found by arranging all the elements from lowest value to highest value and pick…

win32 段寄存器怎么寻址

32位cpu 地址线扩展成了32位&#xff0c;这和数据线的宽度是一致的。因此&#xff0c;在32位机里其实并不需要采用“物理地址段&#xff1a;偏移”这种地址表达方式。原来在16位机里规定的 每一个段不大于64kb在32位机里也不是必要的。所以&#xff0c;对于32位机来讲&#xff…

联想拯救者y7000p加内存条_笔记本怎么升级内存和硬盘 联想Y7000P加装内存和硬盘图文教程 (全文)...

一般目前新买的笔记本电脑,大都是标配8GB内存和单块固态硬盘,内存和硬盘容量适中,但对于一些制图设计、偏大型游戏,又或者对硬盘存储要求比较高的用户来说,显然就不太够用,这时候我们一般会通过升级内存和硬盘来解决。那么,笔记本怎么升级内存和硬盘?下面以联想Y7000P笔…

计算机组装与维护实训1,计算机组装与维护实训报告[1]

计算机组装与维护实训报告[1] (12页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;11.90 积分实习报告设计题目&#xff1a; 计算机组装与维护实习 专业班级&#xff1a; 计算机应用103班 学生姓名&a…

node.js-------使用路由模块

路由需要的信息&#xff0c;包括URL 及GET 或 POST参数。路由根据这些参数执行相应的js处理程序&#xff0c;因此&#xff0c;需要在HTTP请求中提取出URL以及GET或POST参数。这些请求参数在request对象中&#xff0c;这个对象是onRequest()回调函数的第一个参数。需要提取这些信…

Docker - 在CentOS 7中安装Docker

在CentOS 7中安装Docker 1-确认系统信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux CentOS-7 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 2-安装docker # yum -y install docker 3…

HDU 1715 大菲波数 (大数问题)

/* 复习大数问题&#xff1b; */ #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <iomanip> using namespace std;int nu…