PHP ajax 上传大文件带进度条

服务器设置

. 修改PHP配置文件中的三项:vim /usr/local/php/etc/php.ini

(1)post_max_size = 50M      #PHP可接受的最大POST数据

(2)upload_max_filesize = 50M   #文件上传允许的最大值

(3)max_execution_time = 300   #每个脚本的最大执行时间,秒钟(0则不限制,不建议设0)

2. 修改Nginx配置文件:vim /usr/local/nginx/conf/nginx.conf (如果忘了配置文件的具体位置,可以使用 locate nginx.conf 查找)

(1)client_max_body_size 50m   #客户端最大上传大小 50M

3. 重启PHP:/etc/init.d/php-fpm restart

4. 平滑重启Nginx:/usr/local/nginx/sbin/nginx -s reload

html

<div class="layui-form-item layui-inline" >

<label class="layui-form-label" ><font color="red" >文件名称:</font></label>

<div class="layui-input-inline">

<input type="file" name="files[]" style="padding-top: 8px;" multiple="multiple" >

</div>

</div>

<!--layui进度条-->

<div class="layui-form-item layui-inline" style="width:580px;">

<div class="layui-progress layui-progress-big" lay-filter="demo" id="progress_file" style="display:none" lay-showPercent="true">

<div class="layui-progress-bar layui-bg-blue" lay-percent="0%"></div>

</div>

</div>
<script>

$(document).ready(function(){ 

window.form.render();

var element = layui.element;

element.init();



$("#btn_file").click(function(){

var formData = new FormData($("#importForm")[0]); // 因为new FormData的参数需要一个HTMLElement类型的数据,而jQuery得到的是个HTMLElement的集合,哪怕只有一个元素。所以需要用[]取其第一个元素。


$("#progress_file").show();

$.ajax({

url:"{:url('fileUpload')}",

async: true, //异步,必须

type: 'POST',

data: formData,

dataType: 'json', //ajax 返回的数据形式为json 格式

processData: false,

contentType: false,

xhr:function(){

myXhr = $.ajaxSettings.xhr();

if(myXhr.upload){

myXhr.upload.addEventListener('progress',function(e){

var loaded = e.loaded;

var total = e.total;

var percent = Math.floor(100*loaded/total)+'%';

element.progress('demo', percent);

}, false);

}

return myXhr;

},

error:function(data){

console.log(data);

layer.msg( '网络错误',{icon:2}, {time:2});

},

success:function(json){

console.log(json);

if ( json.code == 200) {



layer.msg( json.msg,{icon:1}, {time:2}, redirect() );

} else {

layer.msg( 'aa',{icon:2}, {time:2} );

}

}

});

function redirect () {

setTimeout(function(){

layer.closeAll();

window.parent.onhashchange();}, 2500); //onhashchange() 局部刷新

}

})



});

</script>

 

说明关于:

1、后端就是正常的php 上传文件处理

2、进度条样式用的是 layui

3、 var formData = new FormData($("#importForm")[0]); 获取表单的数据

FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。

 

4、为何要 $("#importForm")[0] ,加0

jQuery是一个伪数组对象,本身是对象,能表现出来数组的特点: 有length属性,能够用下标取值;

$(".someClass") // 这个时候将所有匹配到DOM元素对象放在jQuery维护的数组中;

$("#id") // 这个时候将所有匹配到DOM元素对象放在jQuery维护的数组中;

在数组的特征外,jQuery还可以调用next(), last()等方法(返回结果也还是jQuery对象,jQuery链式功能);

如下图:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Ajax上传文件并显示进度条,您可以使用FormData对象和XMLHttpRequest对象。以下是一个简单的示例代码: HTML代码: ``` <form id="file-upload-form"> <input type="file" name="file"> <button type="submit">上传文件</button> </form> <div id="progress-bar"></div> ``` JavaScript代码: ``` var form = document.getElementById('file-upload-form'); var progressBar = document.getElementById('progress-bar'); form.addEventListener('submit', function(e) { e.preventDefault(); var formData = new FormData(this); var xhr = new XMLHttpRequest(); // 监听上传进度 xhr.upload.addEventListener('progress', function(e) { if (e.lengthComputable) { var percentComplete = (e.loaded / e.total) * 100; progressBar.style.width = percentComplete + '%'; } }, false); // 完成上传 xhr.addEventListener('load', function() { progressBar.innerHTML = '上传完成!'; }, false); // 处理上传错误 xhr.addEventListener('error', function() { progressBar.innerHTML = '上传失败。'; }, false); // 发送上传请求 xhr.open('POST', 'upload.php'); xhr.send(formData); }); ``` 在这个示例中,我们首先获取了表单和进度条元素。然后,我们监听了表单的提交事件,阻止了默认的表单提交行为。接着,创建了FormData对象来包含上传文件数据,并创建了XMLHttpRequest对象。我们给XMLHttpRequest对象添加了一个上传进度事件监听器,当上传进度发生变化时,更新进度条的宽度。接着,我们添加了一个成功上传完成的事件监听器和一个上传错误的监听器。最后,我们打开了一个POST请求,并将FormData对象作为参数发送到服务器。 请注意,这只是一个基本的示例,您需要根据自己的需求进行修改。同时,要确保服务器端也能够处理Ajax上传请求,并返回正确的响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值