专栏首页HTML5学堂PHP的文件上传操作

PHP的文件上传操作

HTML5学堂:关于文件上传,主要包括“构建基本表单”-“使用AJAX发送请求,上传文件”-“使用PHP获取文件基本信息”-“执行SQL语言,返回基本图片路径”-“使用DOM操作设置预览图路径”。一起来开始今天的学习吧~!

先来看效果图

上图为上传文件前

上图为上传文件后

核心知识 - 文件上传操作的基本步骤

1、构建基本的表单,并针对表单进行相关处理

2、在“上传文件”数据发生变化的时候,使用AJAX发送请求

3、PHP获得到文件的基本信息

4、PHP执行SQL,将获取的基本信息存入数据库

5、PHP返回基本的图片路径

6、使用DOM操作设置预览图的路径

最核心的知识,其实依旧是知识的逻辑。

前期需要有什么?

最基本的数据库和最基本的文件夹结构还是要有的。

此处基本的文件夹结构如下图:

数据库相关准备如下图:

构建基本的表单,并针对表单进行相关处理

<form action="edit.php" class="form" class="add-form">
<div class="control">
<label for="username">用户名:</label>
<input type="text" name="username" id="username" value="HTML5学堂">
</div>
<div class="control">
<label>头像:</label>
<div>
<img src="" alt="需要上传的图片" id="face-img">
</div>
<!-- 与upload-form表单的input相关联 -->
<label for="face" class="face">上传图片</label>
</div>
<div class="form-actions">
<input type="submit">
</div>
</form>


<!-- 文件上传的表单 -->
<form action="file.php" method="post" class="upload-form" enctype="multipart/form-data">
<div>
<input type="file" name="file" id="face">
</div>
</form>

如果需要实现文件的上传,需要为表单form标签增加一个属性:enctype。表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,实现文件上传。

在“上传文件”数据发生变化的时候,使用AJAX发送请求

基本代码如下:

<script type="text/javascript">
$("#face").on("change", function(){
// 当值发生变化,且不为空的时候,通过AJAX提交表单
if($.trim($(this).val()) != "") {
var url = $(".upload-form").attr("action");
// 使用jquery.form.js的AJAX提交表单
// API文档: https://github.com/malsup/form
$(".upload-form").ajaxSubmit({
   url : url,
   type: "POST",
   success: function(response) {
   }
});
}
})
</script>

为上传文件的input绑定change事件,监测值是否为空,如果不为空,则获取到要提交的地址,进行数据的提交。此处涉及到两个知识点,其一在于$.trim()方法,该方法是JQ的字符串方法之一,主要用于去掉字符串首尾的空格。第二个知识点,在于此处需要使用jquery.form.js插件辅助完成AJAX对数据的提交——ajaxSubmit方法。

PHP获得到文件的基本信息

<?php
header('Content-Type:text/json;charset=utf-8');


define('PATH', $_SERVER['DOCUMENT_ROOT']);    // 定义文件路径
define('MYSQL_DATABASE', 'student'); // 定义要连接的数据库
define('MYSQL_HOST', 'localhost'); // 定义主机地址
define('MYSQL_USER', 'root'); // 定义用户名
define('MYSQL_PASSWORD', ''); // 定义密码
define('AUTHOR', 'HTML5学堂');
define('AUTHOR_URL', 'http://www.h5course.com');


$conn = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die("conn err!");
mysql_query("set names 'utf8'");
mysql_select_db(MYSQL_DATABASE, $conn);
$fileUrl = "";
$uploadfile = "img/".$_FILES["file"]["name"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $uploadfile)){
$fileUrl = "img/".$_FILES["file"]["name"]; // 数据库图片路径
}
$arr["url"] = $fileUrl;
?>

首先需要注意的是,最后要返回JSON类型内容,因此header命令中使用json类型。之后的数据库连接我就不再讲解了,如果还不是太清楚,可以查看《PHP对数据库的相关操作》

在PHP当中,通过$_FILES这个超全局变量进行文件相关信息的获取,使用$_FILES["file"]["name"]获取文件的名字,使用$_FILES["file"]["tmp_name"]进行临时路径的获取,使用move_upload_file()方法进行文件路径的重新设置。

该函数的作用是把上传的文件移动到一个新的位置。有两个参数,第一个参数是你上传后的临时文件名,由系统自动生成 —— $_FILE["file"]["tmp_name"];其中的file为你前台文件上传表单的名称。第二个参数就是包含有路径的新的文件名。如:"h5course/data.jpg";

PHP执行SQL,将获取的基本信息存入数据库

具体代码如下:

// 插入数据库
mysql_query("INSERT INTO images(fileUrl) VALUES('$fileUrl')"

PHP返回基本的图片路径

将获取到的地址进行JSON编码,并使用echo语句将结果输出出来。具体代码如下:

echo json_encode($arr); // 返回JSON数据,里面有文件的路径

使用DOM操作设置预览图的路径

具体代码如下:

$("#face-img").attr("src", response.url);

最后 奉上完全版本的代码

HTML文件 - 基本结构与JS

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂 - 刘国利 尹鹏 - 独行冰海 尹小芃槑</title>
<link rel="stylesheet" href="css/reset.css">
<script type="text/javascript" src="js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
<style>
.face {
border: 1px solid red;
}
.upload-form {
display: none;
}
</style>
</head>
<body>
<form action="edit.php" class="form" class="add-form">
<div class="control">
<label for="username">用户名:</label>
<input type="text" name="username" id="username">
</div>
<div class="control">
<label>头像:</label>
<div>
   <img src="" alt="需要上传的图片" id="face-img">
</div>
<!-- 与upload-form表单的input相关联 -->
<label for="face" class="face">上传图片</label>
</div>
<div class="form-actions">
<input type="submit">
</div>
</form>


<!-- 文件上传的表单 -->
<form action="file.php" method="post" class="upload-form" enctype="multipart/form-data">
<div>
<input type="file" name="file" id="face">
</div>
</form>
<script type="text/javascript">
$("#face").on("change", function(){
// 当值发生变化,且不为空的时候,通过AJAX提交表单
if($.trim($(this).val()) != "") {
   var url = $(".upload-form").attr("action");
   // 使用jquery.form.js的AJAX提交表单
   // API文档: https://github.com/malsup/form
   $(".upload-form").ajaxSubmit({
       url : url,
       type: "POST",
       success: function(response) {
           $("#face-img").attr("src", response.url);
       }
   });
}
})
</script>
</body>
</html>

PHP文件 —— 此处命名采用的是file.php

<?php
header('Content-Type:text/json;charset=utf-8');


define('PATH', $_SERVER['DOCUMENT_ROOT']);    // 定义文件路径
define('MYSQL_DATABASE', 'student'); // 定义要连接的数据库
define('MYSQL_HOST', 'localhost'); // 定义主机地址
define('MYSQL_USER', 'root'); // 定义用户名
define('MYSQL_PASSWORD', ''); // 定义密码
define('AUTHOR', 'HTML5学堂');
define('AUTHOR_URL', 'http://www.h5course.com');


$conn = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die("conn err!");
mysql_query("set names 'utf8'");
mysql_select_db(MYSQL_DATABASE, $conn);




$fileUrl = "";
$uploadfile = "img/".$_FILES["file"]["name"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $uploadfile)){
$fileUrl = "img/".$_FILES["file"]["name"]; // 数据库图片路径
}
$arr["url"] = $fileUrl;
// 插入数据库
mysql_query("INSERT INTO images(fileUrl) VALUES('$fileUrl')");
echo json_encode($arr); // 返回JSON数据,里面有文件的路径
?>

欢迎沟通交流~HTML5学堂

本文分享自微信公众号 - HTML5学堂(h5course-com),作者:HTML5学堂

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • jQuery animate动画精讲

    HTML5学堂:animate是jQuery中很好用的一个方法,用于实现自定义动画。对于animate方法是有不同的书写方法的,今天我们就来说说animate平...

    HTML5学堂
  • 本周群问题分享

    收集时间:2016.4.18~2016.4.22 温馨提示:小编从大家的问题当中提取了几个比较经典的问题与大家一起分享。 JavaScript 如何获取上传图片...

    HTML5学堂
  • 关于行、块元素的讲解以及HTML5元素的分类

    继上周我们讲解了所有常用的CSS选择器以及CSS选择器的优先级。到目前为止,你是不是觉得静态页面布局简单了很多,而不是单单使用类名选择器(虽然很好用)来操作了。...

    HTML5学堂
  • 前端-朝花夕拾-vue-Element小技巧

    A:官网有配置主题的页面可以配置后下载使用element.eleme.cn/#/zh-CN/the…

    吴文周
  • 作为程序员,这些实用工具你必须要知道!

    对于程序员来说,编程是一个相当耗费时间和经历的过程,而在这个过程中,一个称手而高效的工具就显得非常重要。

    良月柒
  • 流水线、超流水线、超标量(superscalar)技术对比(转)

    流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未...

    zy010101
  • 流水线、超流水线、超标量(superscalar)技术对比

    本文转载自:https://blog.csdn.net/qq_32092885/article/details/83349275

    zy010101
  • 海康摄像头直播视频上传到流媒体服务器平台后如何降低延迟?(附TCP及UDP区别介绍)

    近期有位开发者为了用我们的国标GB28181流媒体服务器进行测试,在自己的现场环境安装了海康的有线摄像头,通过4g转wifi来连接,上传视频到平台之后,打开视频...

    EasyNVR
  • 新手程序员编程必不可少的八大工具

    对于程序员来说,编程是一个相当耗费时间和经历的过程,而在这个过程中,一个称手而高效的工具就显得非常重要。 加上近期有不少小伙伴在问一些方方面面的工具,所以今天就...

    老九君
  • PHP安全函数过滤实例

    表单输入<script>alert(1);</script>后,可以发现<>被转义(当然还可以输入其他的,只要是字符就会转变成HTML实体)

    行云博客

扫码关注云+社区

领取腾讯云代金券