这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯

首先,前端界面

1、表单的首行需要加上enctype="multipart/form-data",需要上传的图片必须设置 type="file"表示选择文件

<form id="img_form" method="post" class="form-horizontal" role="form" enctype="multipart/form-data">
<label class="col-sm-3 control-label" for="image">图片:</label>
<div class="col-sm-9 require">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">//文件最大尺寸
<input type="file" class="form-control" name="image" id="image">
</div>
</div>
</form>

2、为表单添加事件,我用的是ajax

因为图片在是二进制传输,所以需要用new FormData(this)获取表单非文本类的数据(注包括文本类),纯文本类数据可用$(this).serialize();

$('#form1').submit(function (e) {
e.preventDefault();
var data=new FormData(this);//获取非文本类的数据
$.ajax({
url:"php/add.php",//处理页面的路径
data:data,//通过json格式将一组数据传过去
type:"post",//数据的提交和传递方式,最好用POST
dataType:"json",//页面返回值的类型,共有三种:TEXT,JSON,XML可选
cache:false,
contentType:false,
processData:false,
success:function(res){//回调函数:如果ajax调用成功,就执行这个success后面的函数,(data)当做参数返回过来
if (res.flag===1){
alert('上传成功!');
} else if(res.flag===2){
alert('网络或其他未知错误,请重试!')
}else{
alert('图片格式错误,请重试!')
}
},
error: function () {
alert("error")
}
});
});

3、编写php文件

connect.php

数据库连接文件

<?php
$link=new PDO("mysql:host=localhost;port=3306;dbname=db","root","");
$link->query("set names utf8");

add.php

  • extract($_POST):批量获取前端post方式传过来的数据,使用参数时参数名为前端传过来的初始名。

  • in_array(search,array,type):搜索数组中是否存在指定的值,即元素是否存在与数组,返回true或false。

    search,必需,规定要在数组搜索的值。array,必需,规定要搜索的数组。type,可选,如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

  • count():获取数组元素个数

  • $_FILES['image']['name']:'image'为前端图片定义的name,后面的'name'不可变

  • file_exists():检查图片是否存在文件夹,存在返回ture,否则false

    -upload:是我图片上传目标文件

<?php
extract($_POST);
$date = date('Y-m-d');
$file_name = $_FILES['image']['name'];//获取缓存区图片,格式不能变
$type = array("jpg", "gif", 'png', 'bmp');//允许选择的图片类型
$ext = explode(".", $file_name);//拆分获取图片名
$ext = $ext[count($ext) - 1];//取图片的后缀名
if (in_array($ext,$type)){
do{
$new_name = get_file_name(6).'.'.$ext;
$path='upload/'.$new_name;//upload为目标文件夹
}while (file_exists("../" . $path));//检查图片是否存在文件夹,存在返回ture,否则false
$temp_file=$_FILES['image']['tmp_name'];//获取服务器里图片
include_once ('connect.php');//连接数据库
$result = $link->exec("INSERT INTO `news`(`title`,`author`, `content`, `src`,`time`) VALUES ('$title','$author','$content','$path','$date')");
if ($result){
move_uploaded_file($temp_file,"../" .$path);//移动临时文件到目标路径
$arr['flag']=1;
$arr['detail']=[$title,$author,$content,$path];
}else{
$arr['flag']=2;
}
}else{
$arr['flag']=3;
}
function get_file_name($len)//获取一串随机数字,用于做上传到数据库中文件的名字
{
$new_file_name = 'A_';
$chars = "1234567890qwertyuiopasdfghjklzxcvbnm";//随机生成图片名
for ($i = 0; $i < $len; $i++) {
$new_file_name .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $new_file_name;
}
echo json_encode($arr);

PHP实现图片(文件)上传的更多相关文章

  1. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...

  2. SpringMvc MultipartFile 图片文件上传

    spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...

  3. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  4. PHP 图片文件上传代码

    通过 PHP,可以把文件上传到服务器.里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的 ...

  5. PHP 图片文件上传代码分享

    分享下php上传图片文件的一段代码,挺不错的. 通过 PHP,可以把文件上传到服务器.加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 当然了,会禁止上传php文件,以及其它程序代 ...

  6. PHP图片文件上传类型限制扩展名限制大小限制与自动检测目录创建。

    程序测试网址:http://blog.z88j.com/fileuploadexample/index.html 代码分为两部分: 一部分form表单: <!doctype html> & ...

  7. iOS分享 - AFNetworking之多图片/文件上传

    在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...

  8. Struts2图片文件上传,判断图片格式和图片大小

    1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...

  9. SSH—网上商城之商品图片文件上传

    前言 网上商城中的淘宝图片要显示在页面的前提是图片应该已经在数据库里面,那么怎么实现图片的上传功能呢,这就是今天要说的主题. 内容 需求: 商城后台需要添加图片文件,用来图片显示 解决方式: Stru ...

  10. 利用Selenium实现图片文件上传的两种方式介绍

    在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...

随机推荐

  1. Vue.JS学习基础

      = 导航   顶部 vue.js介绍 vue.js实例 模板语法 计算属性 样式绑定 条件渲染 列表渲染 事件处理器 表单控件绑定 组件   顶部 vue.js介绍 vue.js实例 模板语法 计 ...

  2. numpy 辨异(三)—— hstack/column_stack,linalg.eig/linalg.eigh

    1. np.hstack np.column_stack >>> np.hstack([np.array([1, 2, 3]), np.array([4, 5, 6])]) arra ...

  3. .Net Remoting的双向通信和Windows Service的宿主服务

    原文:.Net Remoting的双向通信和Windows Service的宿主服务 作为微软分布式技术之一的.Net Remoting,从性能.安全等各方面来说都是相对比较稳定的,也是一项比较成熟的 ...

  4. Method and system for public-key-based secure authentication to distributed legacy applications

    A method, a system, an apparatus, and a computer program product are presented for an authentication ...

  5. GetEntryAssembly、GetExecutingAssembly和GetCallingAssembly的区别

    GetEntryAssembly获取的是当前应用程序第一个启动的程序,一般就是xxx.exe文件. GetExecutingAssembly获取的是当前执行的方法所在的程序文件,可能是.exe,也可能 ...

  6. mysql 加入柱更改列删除列

    MySQL 加入列,改动列,删除列 ALTER TABLE:加入,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to bb ...

  7. MFC中获取App,MainFrame,Doc和View类等指针的方法

    From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03   MFC中获取App,MainFrame,Doc和View类等指针的方法 ...

  8. 与jQuery的感情碰撞——由浅入深学jQuery

    原来的时候自己看过jQuery,但是对于什么是jQuery,除了知道jQuery是一种javascript类库外,除了会用几个网页特效外,其他的我这真的是不知道啊.眼看自己就要找工作了,所以自己需要好 ...

  9. pandas 学习(二)—— pandas 下的常用函数

    import pandas as pd; 1. 数据处理函数 pd.isnull()/pd.notnull():用于检测缺失数据: 2. 辅助函数 pd.to_datetime() 3. Series ...

  10. WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容

    原文:WPF实现选项卡效果(3)--自定义动态添加的AvalonDock选项卡内容 简介 在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任 ...