PHP.20-图片上传下载
图片上传下载
思路:
1、创建图片上传的存放目录
/uploads/
2、index.php //浏览页面,提供上传表单
上传表单:文件上传必须使用enctype="multipart/form-data",且用post提交
<form action="doupload.php" enctype="multipart/form-data" method="post">
浏览图片
<th>序号</th><th>图片</th><th>上传时间</th><th>操作</th>
<?php
//1、打开目录uploads
$dir = "./uploads/";
if(is_dir($dir)){ //is_dir:判断是否是一个目录
$dh = opendir($dir);
//2、遍历目录输出图片信息
$i=0;
while(false !== ($file = readdir($dh))){ //while ($file = readdir($handle)) 是错误的遍历方法
if($file != "." && $file != ".."){ //列出当前目录的所有文件并去掉.和..
$i++;
echo "<td><img src='{$dir}{$file}' width='80' height='50'></td>"; //输出图片
echo '<td>'.date("Y-m-d H:i:s", filectime($dir.$file)).'</td>';
echo "<td><a href='{$dir}{$file}'>查看</a>
<a href='download.php?name={$file}'>下载</a></td>";
//3、关闭目录
closedir();
3、doupload.php //图片上传
//1、获取上传文件信息
$upfile = $_FILES["pic"];
$typelist = array("image/jpeg", "image/png", "image/gif"); //定义允许的类型
$path = "./uploads/"; //定义上传后的目录
//2、过滤上传文件错误号
if($upfile["error"] > 0){
switch ($upfile["error"]){ //error:1、2、3、4、6、7
//3、本次上传大小过滤
if($upfile['size'] > 2000000){
//4、类型过滤
if(!in_array($upfile["type"], $typelist)){
//5、上传文件重命名(随机获取一个文件名,保留后缀名)
$fileinfo = pathinfo($upfile["name"]); //pathinfo:解析上传文件名字
do{
$newfile = date("Y-m-d").rand(1000, 9999).".".$fileinfo["extension"];
}while(
file_exists($path.$newfile)
);
//6、执行文件上传
if(is_uploaded_file($upfile["tmp_name"])){ //判断是否是一个上传文件
if(move_uploaded_file($upfile["tmp_name"], $path.$newfile)){ //移动上传文件
4、download.php //图片下载功能
//1、获取要下载的图片名(加上路径)
$file = "./uploads/".$_GET["name"];
//2、重设响应类型
$info = getimagesize($file); //获得图像大小
//3、指定下载的文件名
header("Content-Disposition:attachment;filename=".$_GET["name"]);
//4、制定文件的大小
header("Content-length:".filesize($file));
//5、响应内容
readfile($file); //输出一个文件
PHP.20-图片上传下载的更多相关文章
- JSP+Servlet中使用jspsmartupload.jar进行图片上传下载
JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...
- WebApi2 文件图片上传下载
Asp.Net Framework webapi2 文件上传与下载 前端界面采用Ajax的方式执行 一.项目结构 1.App_Start配置了跨域访问,以免请求时候因跨域问题不能提交.具体的跨域配置方 ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
- [iOS AFNetworking框架实现HTTP请求、多文件图片上传下载]
简单的JSON的HTTP传输就不说了,看一个简单的DEMO吧. 主要明白parameters是所填参数,类型是字典型.我把这部分代码封装起来了,以便多次调用.也许写在一起更清楚点. #pragma m ...
- 微信公共服务平台开发(.Net 的实现)8-------处理图片(上传下载发送)
举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这 ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...
- 【转载】【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示
基于Nginx及FastDFS,完成商品图片的上传及展示 一.传统图片存储及展示方式 存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的 ...
- Linux上传下载神器之 lrzsz
在开发的过程中,经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时,一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能解决问题,但是这些工具需要在本地安 ...
随机推荐
- Android 使用xml实现边框阴影,背景渐变效果(附有RGB颜色查询对照表)
上图是显示效果,下面是代码实现: 个人理解就是使用layer-list实现两层view的叠加,其中top,left,bottom,left控制阴影 <?xml version="1.0 ...
- 【起航计划 019】2015 起航计划 Android APIDemo的魔鬼步伐 18 App->Device Admin 设备管理器 DeviceAdminReceiver DevicePolicyManager PreferenceActivity的使用
Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 使用DevicePolicyManager这个类, ...
- SQL SERVER 错误代码 0x534
解决办法就是修改一下登陆名: ALTER LOGIN [G-PC\zqwang] WITH NAME=[新的机器名\zqwang]; 然后查询一下 Service Broker 队列, 里面已经有 ...
- Ubuntu、Windows 、Linux集合
一.Ubuntu/Windows双系统修复引导 首先说明:在Windows存在的前提下安装Ubuntu(或者Ubuntu系列)是不需要修复引导的.因为grub会自动搜索存在硬盘中的系统. 而在 ...
- java使用poi读取ppt文件
package msoffice; import java.io.File; import java.io.FileInputStream; import java.io.IOException; i ...
- CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑
CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Wor ...
- framework7 可以拉动右侧工具栏和点击当前item就可以出发事件的HTML结构
<li class="swipeout"> <div class="swipeout-content item-content"> &l ...
- 指定类型的成员XX”不支持实体LINQ。只有初始化,成员单位,和实体导航性能的支持。
The specified type member 'DeleteFlag' is not supported in LINQ to Entities. Only initializers, enti ...
- Linux高性能server编程——定时器
版权声明:本文为博主原创文章.未经博主允许不得转载. https://blog.csdn.net/walkerkalr/article/details/36869913 定时器 服务器程序通常管 ...
- Kubernetes解决了Docker使用中的哪些问题?
kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本 (1)基于容器的应用部署.维护和滚动升级 (2)网络,建立容器之间的通信子网如隧道.路由等,解 ...