本文实例讲述了JS+php后台实现文件上传功能。分享给大家供大家参考,具体如下:

一、利用 FormData 对象形式上传

FormData 是 XMLHttpRequest 2 的产物,兼容 IE10+。

FormData 对象,可以把form中所有表单元素的name与value组成一个queryString,提交到后台。在使用Ajax提交时,使用FormData对象可以减少拼接queryString的工作量。

使用 FormData 对象

1.取得form对象,作为参数传入到FormData对象

html:

js:

var form = document.getElementById('form1');

var formdata = new FormData(form);

2.创建一个FormData空对象,然后使用append方法添加key/value

var formdata = new FormData();

formdata.append('name','fdipzone');

formdata.append('gender','male');

使用FormData提交表单及上传文件实例:

实例1

一般项目中使用的点击上传文件的按钮跟 默认样式是不一样的,我们得自定义。方法是,自己写一个 按钮,然后再写一个 (这个要隐藏,太难看),点击 的时候出发 的 click 事件。

HTML:

:style="{display: 'none'}"

ref="input" @change="selectedFile"

/>

上传

JS:

methods: {

triggerSelect () {

this.$refs.input.click()

},

selectedFile (e) {

console.log(e.target.files[0])

//根据项目需求做具体处理,比如说获取文件名

},

async upload () {

//如果不需要用到上传后的返回值可以把 async...await 语法去掉

let files = this.$refs.input.files;

if(files.length > 0) {

let form = new FormData();

form.append('file', files[0])

let data = await new Promise((resolve, reject) => {

axios({

url: '',

method: 'post',

data: form

})

.then(res => {

resolve(res)

})

.catch(err => {

reject(err)

})

})

}

}

}

实例2

FormData Demo

name:

gender:male female

photo:

function fsubmit(){

var data = new FormData($('#form1')[0]);

$.ajax({

url: 'server.php',

type: 'POST',

data: data,

dataType: 'JSON',

cache: false,

processData: false, //不处理发送的数据,因为data值是FormData对象,不需要对数据做处理

contentType: false //不设置Content-type请求头

}).done(function(ret){

if(ret['isSuccess']){

var result = '';

result += 'name=' + ret['name'] + '
';

result += 'gender=' + ret['gender'] + '
';

result += '';

$('#result').html(result);

}else{

alert('提交失敗');

}

});

return false;

}

server.php

$name = isset($_POST['name'])? $_POST['name'] : '';

$gender = isset($_POST['gender'])? $_POST['gender'] : '';

$filename = time().substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'],'.'));

$response = array();

if(move_uploaded_file($_FILES['photo']['tmp_name'], $filename)){

$response['isSuccess'] = true;

$response['name'] = $name;

$response['gender'] = $gender;

$response['photo'] = $filename;

}else{

$response['isSuccess'] = false;

}

echo json_encode($response);

?>

带显示图片的上传图片

// -------- 将以base64的图片url数据转换为Blob --------

function convertBase64UrlToBlob(urlData, filetype){

//去掉url的头,并转换为byte

var bytes = window.atob(urlData.split(',')[1]);

//处理异常,将ascii码小于0的转换为大于0

var ab = new ArrayBuffer(bytes.length);

var ia = new Uint8Array(ab);

var i;

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

ia[i] = bytes.charCodeAt(i);

}

return new Blob([ab], {type : filetype});

}

$input.on('change', function (e) {

var input = $input.get(0);

var files = input.files || [];

if (files.length === 0) {

return;

}

console.log('选中 ' + files.length + ' 个文件');

// 遍历选中的文件,预览、上传

$.each(files, function (key, file) {

var filename = file.name || '';

var fileType = file.type || '';

var reader = new FileReader();

// onload事件

reader.onload = function (e) {

var base64 = e.target.result || this.result;

var formData = new FormData();

formData.append("upload_file", convertBase64UrlToBlob(base64, fileType), filename);

var xhr = new XMLHttpRequest();

// 开始上传

xhr.open('POST', uploadImgUrl, true);

// 发送数据

xhr.send(formData);

});

reader.readAsDataURL(file);

});

});

二、base64 字符串方式上传图片

base64 在线转换网站:http://tools.jb51.net/transcoding/img2base64

DataURI 允许在HTML文档中嵌入小文件,可以使用 img 标签或 CSS 嵌入转换后的 Base64 编码,减少 HTTP 请求,加快小图像的加载时间。 经过Base64 编码后的文件体积一般比源文件大 30% 左右。

Base64 在CSS中的使用:

.box{

background-image: url("data:image/jpg;base64,/9j/4QMZR...");

}

Base64 在HTML中的使用:

(不推荐用base64,效率慢,消耗流量,占用空间。推荐使用把base64图片格式转换成FormData形式传递)

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript表单(form)操作技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

js 实现文件上传 php,JS+php后台实现文件上传功能详解相关推荐

  1. filezilla定时上传_filezilla使用教程,filezilla使用教程,教程详解

    FileZilla是一种快速.可信赖的FTP客户端以及服务器端开放程式,具有多种特色.直接的接口.既然提到ftp客户端,那就不得不提iis7. IIS7服务器管理工具中的ftp功能可以实现批量添加服务 ...

  2. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能...

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  3. ajax多文件上传,js限制上传文件大小,文件上传前在浏览器展示

    文件上传是非常常见的功能,这里实现一个多文件上传的例子,前端能够控制上传文件的大小,并在前端展示选择的文件的信息,采用vue+jquery+springboot实现.效果如下: 点击生成的图片可以直接 ...

  4. 收藏个支持进度条与文件拖拽上传的js File Uploader

    File Uploader:支持进度显示与文件拖拽的多文件上传前端JS脚本 分类: JavaScript 2012-03-11 19:20 2028人阅读 评论(11) 收藏 举报 目录(?)[+] ...

  5. 求超大文件上传方案( js )

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  6. js文件上传以及js清空input file值

    最近项目中遇到文件上传的案例, 之前涉及文件上传的较少, 今天针对js文件上传的案例做一个详细的教程,方便日后查阅! 本教程从 原生JS, jQuery, 两处着手简单介绍文件上传案例 1.原生JS ...

  7. [js]uploadify结合jqueryUI弹出框上传,js中的冒出的bug,又被ie坑了

    引言 最近在一个项目中,在用户列表中需要对给没有签名样本的个别用户上传签名的样本,就想到博客园中上传图片使用弹出框方式,博客园具体怎么实现的不知道,只是如果自己来弄,想到两个插件的结合使用,在弹出框中 ...

  8. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)

    前端图片压缩上传(纯js的质量压缩,非长宽压缩) 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> ...

  9. js实现多图上传和预览(包含表单上传、ajax上传)

    请在这里查看示例 ☞ h5Upload示例 包含的知识点有:(仅考虑手机端,pc兼容性不清,建议使用jquery版本的) 1.浏览器自带的表单上传(页面会跳转) 2.ajax上传(异步刷新.自动上传. ...

  10. uedit修改文件上传路劲,支持api文件接口

    首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来serverUrl: " ...

最新文章

  1. LOAM 代码部分的公式推导(前端里程计部分)
  2. windows mysql增量备份_windows下mysql增量备份与全备份批处理
  3. 打造LINUX系统安全(早期学习笔记)
  4. solr 启动时指定 solr.home
  5. 刚聊完就弹窗推荐,这些 APP 是在偷听吗?
  6. Linux的crond的配置流程,Linux之定时任务Crond详解
  7. linux 内核 3.3.8,Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8
  8. asp.mvc 基本知识
  9. 戴尔T630安装Ubuntu操作系统及Gaussian 09
  10. vue 二级三级路由配置
  11. linux在线汇编编译器,Linux 汇编 Hello World
  12. x264 vbv-maxrate与vbv-bufsize对码率控制
  13. miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
  14. android 音乐柱状图动画,android 音乐播放柱形图
  15. 铁道部购票网站可能造成另一次的密码危机
  16. 【文智背后的奥秘】系列篇——关键词智能提取
  17. 前端接收list的情况 (批量添加)出现这个错说明不是传参错误,是解析错误
  18. CVS 常用操作命令
  19. GitHub 上的大佬们打完招呼,会聊些什么?
  20. H3C交换机SSH登录配置

热门文章

  1. 变量太多太复杂该怎么得出结论?——SPSS因子分析操作的详细讲解与介绍
  2. PPT使用技巧 + 快捷键
  3. ppt讲解中的过渡_ppt过渡页的设计技巧
  4. android抢qq红包源码,QQ抢红包插件实现,安卓源码,以及详细分析,androidqq抢红包源码,捡代码论坛整理...
  5. 百度云 自然语言处理(Nlp)
  6. DEV C++下载,百度云盘,干净
  7. android dazen root,Magisk作者再度出击,成功ROOT了Android 11
  8. idea 快捷键大全(全网最详细)
  9. SQL Server无法连接客户端的问题
  10. Mac 查看jdk版本