php处理form多文件上传,ajax利用FormData、FileReader实现多文件上传php获取

前台代码(注意,不需要用到form标签):

a. html部分:

948d991bd880f62255faf05fdbc8105c.png

b. js部分:

ac09dd25fef70cf067882cfef7cd5f3c.png

c. 完整代码:

function loadDoc(file,data,async=true){

if(window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}else{ // code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

if(async === true){

xmlhttp.onreadystatechange = function(){

if(xmlhttp.readyState < 4){

// 加载中

}else if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

// 成功

xmlDoc=xmlhttp.responseText;

return xmlDoc

}else{

// 失败

xmlhttp.abort()

return

}

}

}

xmlhttp.open("POST",file,async);

xmlhttp.send(data);

if(async === false){

xmlDoc=xmlhttp.responseText;

return xmlDoc

}

}

function getEle(id){

var ele = document.getElementById(id)

return ele

}

function sendFile() {

var lee_file = getEle('lee_file');

var lee_text = getEle('lee_text');

var form_data = new FormData();

for (var i in lee_file.files) {

form_data.append('pics[]', lee_file.files[i]);

}

form_data.append('text', lee_text.value);

loadDoc('test.php',form_data)

}

var lee_button = getEle('lee_button');

lee_button.onclick = function(){

sendFile()

}

php获取(用 $_FILE 获取):

3a5642a234058d5b628c3e61d9071310.png

完整代码:

header('Access-Control-Allow-Origin: *');

var_dump($_POST);

var_dump($_FILES);

二、FileReader+FormData+base64

前台代码:

a. html代码:

40264a8de40cae63b38cb799fb9d3066.png

b. js代码:

38d6f77d45fc3b963c5def96c95716f7.png

c. 完整代码:

Document

function loadDoc(file,data,async=true){

if(window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}else{ // code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

if(async === true){

xmlhttp.onreadystatechange = function(){

if(xmlhttp.readyState < 4){

// 加载中

}else if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

// 成功

xmlDoc=xmlhttp.responseText;

return xmlDoc

}else{

// 失败

xmlhttp.abort()

return

}

}

}

xmlhttp.open("POST",file,async);

xmlhttp.send(data);

if(async === false){

xmlDoc=xmlhttp.responseText;

return xmlDoc

}

}

function getEle(id){

var ele = document.getElementById(id)

return ele

}

lee_button = getEle('lee_button')

function sendFile() {

var lee_file = getEle('lee_file').files;

var lee_text = getEle('lee_text');

for (var i = 0; i < lee_file.length; i++) {

file = lee_file[i];

var form_data = new FormData();

var reader = new FileReader();

reader.readAsDataURL(file);

reader.onloadend = function() { // onload代表文件读取成功

getEle('lee_img').setAttribute('src',reader.result);

form_data.append('pic', reader.result);

loadDoc('test.php',form_data)

}

}

}

lee_button.onclick = function() {

sendFile();

}

php代码(用 $_POST 获取):

a. 允许跨域:

d5580863cd12da02f3b71f24d321cdb9.png

b. 将前台post过来的数据保存为临时文件:

6ca0e0c01c8c6974fda91c1a64572dcf.png

c. 获取文件真实后缀函数:

d0b97e450d040bd0ff73232bdac54a36.png

d. 将临时文件保存为带真实后缀的文件:

bb17959230b16ef570550eb3a38c7e01.png

e. 完整代码:

header('Access-Control-Allow-Origin:*');

/*

* 将流文件保存为临时文件

* @param stream base64输入流

* @param tmpname 临时文件路径

*/

function uploadBase64($stream) {

if (empty($stream)) return false;

if (preg_match('/^(data:(\s)?(image|img)\/(\w+);base64,)/', $stream, $str)) {

$suffix = "tmp";

$tmpname = rand(1000, 9999) . ".{$suffix}";

if (file_put_contents($tmpname, base64_decode(str_replace($str[1], '', $stream)))) {

return $tmpname;

} else {

return false;

}

} else {

return false;

}

}

/*

获取图片真实后缀

@param filename 文件名

@param suffix 文件真实后缀(.jpg .png .gif)

*/

function getSuffix($fileName) {

$file = fopen($fileName, "rb");

$bin = fread($file, 2); // 只读2字节

fclose($file);

$strInfo = @unpack("C2chars", $bin);

$typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);

$suffix = "unknow";

if($typeCode == 255216){

$suffix = "jpg";

}elseif($typeCode == 7173){

$suffix = "gif";

}elseif($typeCode == 13780){

$suffix = "png";

}elseif($typeCode == 6677){

$suffix = "bmp";

}elseif($typeCode == 7798){

$suffix = "exe";

}elseif($typeCode == 7784){

$suffix = "midi";

}elseif($typeCode == 8297){

$suffix = "rar";

}elseif($typeCode == 7368){

$suffix = "mp3";

}elseif($typeCode == 0){

$suffix = "mp4";

}elseif($typeCode == 8273){

$suffix = "wav";

}

return $suffix;

}

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

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

相关文章

getattr

getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, y) is equivalent to x.y. When a default argument is given, it is returned when the attribute doesnt exist; without it, an exception is raised in that case转载于:h…

rpmbuild FILE

2、一些rpm相关信息rpm软件包系统的标准分组&#xff1a;/usr/share/doc/rpm-4.3.3/GROUPS各种宏定义&#xff1a; /usr/lib/rpm/macros已经安装的rpm包数据库&#xff1a; /var/lib/rpm如果要避免生成debuginfo包&#xff1a;这个是默认会生成的rpm包。则可以使用下面的命令&a…

Linux设备文件的创建和mdev

以下内容源于微信公众号嵌入式企鹅圈&#xff0c;有格式内容上的修改&#xff0c;如有侵权请告知删除。 本文将从代码级去理解Linux设备类和设备文件的创建过程。 一、设备类相关知识 设备类是虚拟的&#xff0c;并没有直接对应的物理实物&#xff0c;只是为了更好地管理同一类…

linux查看执行过的命令行,在Linux命令终端中查看和编辑曾执行过的命令 – LINUX笔记 – CFEI.NET...

今天我们来讲讲linux的知识,积累的这些知识就是我们以后的财富,各位加油.因为水平有限&#xff0c;难免有疏忽或者不准确的地方&#xff0c;希望大家能够直接指出来&#xff0c;我会及时改正。一切为了知识的分享。history 命令可以用来显示曾执行过的命令&#xff0c;也可以根…

烂泥:【解决】word复制windows live writer没有图片

本文由秀依林枫提供友情赞助&#xff0c;首发于烂泥行天下。 在使用windows live writer发表博客&#xff0c;博客先是在是word2013中进行编辑&#xff0c;编辑完毕后我会复制到windows live writer中&#xff0c;然后发表出去。 使用了几年都没有问题&#xff0c;就是最近这个…

平台设备与平台驱动的注册

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考资料 linux中 probe函数何时调用 platform总线的probe函数调用_Linux编程_Linux公社-Linux系统门户网站 Linux设备驱动模型之platform(平台)总线详解 Linux设备驱动模型2——总线式设备驱动组织方式_天…

JDK源码 - BitSet的实现

java.util.BitSet是个很有趣的类&#xff0c;了解其内部实现对正确的使用非常重要。 对象构造&#xff1a; Java代码 private final static int ADDRESS_BITS_PER_WORD 6; private final static int BITS_PER_WORD 1 << ADDRESS_BITS_PER_WORD; private long[] wor…

细粒度权限控制 linux,利用docker插件实现细粒度权限控制

前言我们在实际的docker运行环境下&#xff0c;大都会遇到多用户的情况&#xff0c;为了安全起见&#xff0c;有些用户我们不想给予其全面的docker控制权限&#xff0c;比如不想某些用户执行docker stop 以及docker rm 等危险指令&#xff0c;当然我们可以从系统账号权限来控制…

linux查找命令、find、grep总结

find 命令 语法&#xff1a;find 搜索路径 匹配表达式 功能&#xff1a;该命令用于在指定路径中查找符合条件的文件&#xff0c;搜索路径可以是多个目录&#xff0c;不同目录之间以空格分隔 &#xff08;1&#xff09;匹配表达式1 -name filename&#xff1a;要查找的文件…

Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...

如果有这样一个需求&#xff1a;客户在一个SharePoint 2010的站点的document library中创建了不同的文件夹FolderA和FolderB&#xff0c;对于上传到此文件夹的文件记录中有某一个列ColumnM,现在他实现当上传文件到不同的文件夹FolderA或FolderB时&#xff0c;列ColumnM使用不同…

linux上安装fio教程,fio工具安装及使用

fio是一种I / O工具&#xff0c;用于基准测试和压力/硬件验证。它支持19种不同类型的I / O引擎(sync&#xff0c;mmap&#xff0c;libaio&#xff0c;posixaio&#xff0c;SG v3&#xff0c;splice&#xff0c;null&#xff0c;network&#xff0c;syslet&#xff0c;guasi&…

Maven的学习资料收集--(九) 构建SSH项目以及专栏maven

在这里整合一下&#xff0c;使用Maven构建一个SSH项目 1.新建一个Web项目 可以参照前面的博客 2.添加依赖&#xff0c;修改pom.xml [html] view plaincopy <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…

博客园的CSRF

CSRF全称 Cross Site Request Forgery&#xff0c;跨站请求伪造。通俗理解&#xff1a;攻击者盗用当前用户身份&#xff0c;发请当前用户的恶意请求&#xff1a;如邮件&#xff0c;银行转账等。 CSRF原理 CSRF过程 登录网站A&#xff0c;生成本地Cookie信息&#xff1b;登录危…

linux 设备驱动总结,linux设备驱动归纳总结.doc

linux设备驱动归纳总结linux设备驱动归纳总结内核&#xff1a;用于管理软硬件资源&#xff0c;并提供运行环境。如分配4G虚拟空间等。 linux设备驱动&#xff1a;是连接硬件和内核之间的桥梁。linux系统按个人理解可按下划分&#xff1a;应用层&#xff1a;包括POSIX接口&#…

开发板——在X210开发板上进行裸机开发的细节

以下内容是学习裸机开发过程中的一些细节内容的记录。 1、汇编语言函数细节 用汇编写的函数&#xff0c;末尾应该添加mov pc,lr语句。 2、裸机代码相关文件 3、关于链接地址 4、关于重定位的理解 &#xff08;1&#xff09;在sram内部重定位 这是在sram内部重定位&#xff0c;因…

linux报网络设备繁忙,【分享】linux常用命令

压缩与备份:bzip2/bunzip2 .bz2文件的压缩/解压缩程序cpio 备份文件dump 备份文件系统gzip/gunzip .gz文件的压缩/解压缩程序gzexe 压缩可执行文件restore 还原由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)tar 将若干文件存档或读取存档文件unarj 解压缩.…

HDU-4454 Stealing a Cake 三分枚举

题意&#xff1a;给定一个点&#xff0c;一个圆&#xff0c;以及一个矩形&#xff0c;现在问从一个点到一个圆再到一个矩形的最短距离为多少&#xff1f;到达一个目标可以只挨着或者穿过它。 解法&#xff1a;目前只知道从一个点到圆上按照[0,PI]&#xff0c;[PI,2*PI]的两个半…

VIP - virtual IP address

virtual IP address (虚拟 IP 地址)1、是集群的ip地址&#xff0c;一个vip对应多个机器2、与群集关联的唯一 IP 地址see wiki&#xff1a; A virtual IP address (VIP or VIPA) is an IP address assigned to multiple applications residing on a single server, multiple dom…