使用php完成常见的文件上传功能(推荐)


Posted in PHP onJanuary 13, 2017

文件上传现在都是很常见的了,可以上传文件,上传头像等,不同的浏览器“文件上传”有不同的效果

先看下火狐浏览器的效果是这样的:

使用php完成常见的文件上传功能(推荐)

再看下IE浏览器是这样的:

使用php完成常见的文件上传功能(推荐)

还有很多其他的浏览器,就不一一的查看效果了,那么这个上传是怎么实现的呢?

一、文件上传功能

(1)第一是要有这个上传页面了

首先是要写表单元素了(其中就有处理页面“关于上传的处理了,其中有些规则可以写”,还有传输方式,再就是一个重要的属性,因为是文件上传,所以要有这个属性:enctype="multipart/form-data")再就是关于按钮了,表单决定之后,就是里面的内容,文件上传自然按钮的类型是“file”;然后就是“上传”按钮了,这个要用到提交,所以按钮类型要用“submit”的,代码如下:

<form action="wenjiansccl.php" method="post" enctype="multipart/form-data">  <!--处理页面起个名字,做文件上传是这个属性:enctype="multipart/form-data"-->
<input type="file" name="file"/> //浏览文件的按钮
<input type="submit" value="上传" /> //提交的上传按钮
</form>

先看下效果:

使用php完成常见的文件上传功能(推荐)

(2)第二就是重要的文件上传的处理页面了

我们可以先上传值输出下,看下文件上传之后会出现什么东西,注意的是:文件的传值方式,这里不能用post或是get了,要用$_FILES[""]这个传值方式

var_dump($_FILES["file"]);  //输出传过来的值

输出结果如图:

使用php完成常见的文件上传功能(推荐)

注意:因为下面会用到这张图中的信息,在这个我先起个名字(array),便于下面用到时讲述不清楚

不难看出数个二维数组:其中有文件的名称,类型,保存位置,错误信息和文件的大小,这样其实文件就会临时的保存在服务器上了

上传文件时有4项注意项:

1.控制上传文件的类型

2.控制上传文件的大小

3.防止文件名重复

3.1修改保存的文件名

  

3.11用户名+时间戳+随机数+文件名

   

3.12流水号

3.2使用文件夹

 

  3.21public/lch/2017-2-12/1.jpg

4.保存文件

知道了这四项注意项(也相当于步骤),那么就开始一步一步的写处理页面就可以了

(1)在输出时,可以看到不是有一项是“错误”项嘛,首先可以判断下是否传输有误

if($_FILES["file"]["error"]) //将文件传值到处理页面,找到出错的索引,也就是(array)图中的错误项error
{
  echo $_FILES["file"]["error"];
}

(2)上面是如果出错就输出出错信息,没有错就是进行下面的内容了:按照注意事项开始写吧

首先是:控制文件上传时的类型和大小(也是从(array)图中找到类型type和大小size,然后将它们赋想要的类型值就可以了)我们限定了jpeg和png这两种,也可是多种,用“或”写上就可以了。这里也用个if语句判断下(如果文件类型是jpeg或是png并且文件大小是小于1024000的就可以上传,否则就是上传失败)

if($_FILES["file"]["type"]=="image/jpeg" || $_FILES["file"]["type"]=="image/png" && $_FILES["file"]["size"]<1024000)
{<br>//注意事项3和4的内容<br>}
else
{
echo "文件类型不正确!"; 
}

(3)在代码中的注释(注意事项3和4的内容)处开始写文件的避免重复和保存

第一:找到文件的保存位置(想要保存在哪个位置),然后拼接上修改文件名的方式(使用时间戳方式)

$filesname = "./files/".date("YmdHis").$_FILES["file"]["name"]; //$_FILES["file"]["name"]这也同样的也是(array)图的名称name

第二:判断文件是否存在(存在就提示,不存在就保存到文件夹中)

if(file_exists($filesname)) //file_exists()方法:判断文件是否存在,里面的值就是定义的保存位置
{
echo "文件已经存在"; //存在给出提示
}
else
{
//不存在就,保存文件(move_uploaded_file()保存)
move_uploaded_file($_FILES["file"]["tmp_name"],$filesname);  //里面的值要有当前的保存位置,将要保存到哪的位置
}
<span style="font-family: 宋体; font-size: 15px"><span style="font-size: 18px">注意:</span><br>1.可能上传的时候是UTF-8的编码格式,Windows是用的国标的编码格式,上传上汉子可能成为乱码了,可以在文件保存位置下面加上“转换编码格式”<br>使用的是:</span><span style="font-size: 15px">iconv()方法:</span><span style="font-size: 15px">里面有3个值,一是现在使用的编码格式,二是想要转换的编码格式,三是想要转换的字符串</span>
$filename = iconv("UTF-8","gb2312",$filesname); //这个iconv()里面有3个值,一是现在使用的编码格式,二是想要转换的编码格式,三是想要转化的字符串
<span style="font-family: 宋体; font-size: 15px">2.如果上面的文件的上传格式是篡改的格式,也用move_uploaded_file()方法</span>

到此这个文件上传就结束了,可以试一下。

二,上传文件预览

上传图片时,都会先看效果怎么样,然后再上传的,接下来就是图片预览功能了

(1)可以先有个文件按钮,用于选择文件

<input id="uploadImage" type="file" name="photoimage" class="fimg1" onchange="PreviewImage();" /> //对这个按钮加一个事件

(2)用于显示的这个图片的一个div

<div id="uploadPreview"></div>

给这个div加点样式

#uploadPreview {
  width: 168px;
  height: 168px;             
  background-position: center center;
  background-size: cover;
  border: 4px solid #fff;
  -webkit-box-shadow: 0 0 0px 0px rgba(0, 0, 0, 0);
  display: inline-block;<br>}

看下效果:

使用php完成常见的文件上传功能(推荐)

然后就是写事件了

$("#uploadImage").on("change", function(){
  // 得到一个参考文件列表
  var files = !!this.files ? this.files : [];
  // 如果没有选择任何文件,或者没有文件读到就返回
  if (!files.length || !window.FileReader) return;
  // 只有进行选择的文件是一个形象
  if (/^image/.test( files[0].type)){
    // 创建一个新的FileReader的实例
    var reader = new FileReader();
    // 读取本地文件作为一个DataURL
    reader.readAsDataURL(files[0]);
    // 当加载时,图像数据设置为背景的div
    reader.onloadend = function(){
    $("#uploadPreview").css("background-image", "url("+this.result+")");
    }
  }
});

这只是一个简单的上传预览,上传到文件中的处理页面还没有写,改天补上完整的上传图片代码

看下选中图片的效果

使用php完成常见的文件上传功能(推荐)

这样,文件上传和图片预览就结束了,这两个结合一下就可以做出图片的上传了,过后我会继续补充完整的~~~

PHP 相关文章推荐
php下用GD生成生成缩略图的两个选择和区别
Apr 17 PHP
PHP 实用代码收集
Jan 22 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 #PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 #PHP
php中分页及SqlHelper类用法实例
Jan 12 #PHP
PHP生成图片验证码功能示例
Jan 12 #PHP
PHP中字符串长度的截取用法示例
Jan 12 #PHP
PHP实现二维数组去重功能示例
Jan 12 #PHP
PHP生成图片缩略图类示例
Jan 12 #PHP
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python实现外卖信息管理系统
2018/01/11 Python
python如何让类支持比较运算
2018/03/20 Python
在Python中表示一个对象的方法
2019/06/25 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
先进集体事迹材料
2014/02/17 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
质量月活动总结
2014/08/26 职场文书
普通话演讲稿
2014/09/03 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
创业计划书之酒店
2019/08/30 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
浅谈python数据类型及其操作
2021/05/25 Python