文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在html中使用ajax上传大文件

2023-06-08 07:15

关注

这篇文章给大家介绍怎么在html中使用ajax上传大文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

html有什么特点

1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适合初学前端开发者使用。2、可扩展性:超级文本标记语言的广泛应用带来了加强功能,增加标识符等要求,超级文本标记语言采取子类元素的方式,为系统扩展带来保证。 3、平台无关性:超级文本标记语言能够在广泛的平台上使用,这也是万维网盛行的一个原因。4、通用性:HTML是网络的通用语言,它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。

原理:利用HTML5的新特性,将文件内容切割成分段的二进制信息,然后每次向服务器上传一段,而服务器,只需要把我们每次上传的二进制信息整合存储到一个文件中,那么最后这个文件就是所上传的文件。

由于php.ini默认的上传大小为2M,如果每批都上传2M,我测试的时候时间比较长,这里我将其限制大小该为20M,最大post数据为28M,便于测试。如果实际开发中不能修改其参数,则每批上传的数据不能超过最大限制。

post_max_size = 28M upload_max_filesize = 20M

我的是在nginx里面上传所以还需要修改Nginx配置文件/etc/nginx/nginx.con

//在http{} 里面加即可 client_max_body_size 50m   #客户端最大上传大小 50M

JavaScript中的File对象

在之前的文章中我们已经使用到了这个Api,File对象中保存了文件的大小、名称、类型等信息

JavaScript中的Blob对象

Blob对象是二进制对象,也是File对象的父类,Blob对象中有一个很重要的方法:slice() 方法,利用这个方法我们可以把文件内容切割成二进制信息。slice() 方法接受三个参数,起始偏移量,结束偏移量,还有可选的 mime 类型。如果 mime 类型,没有设置,那么新的 Blob 对象的 mime 类型和父级一样。

上传页面index.php:

<!DOCTYPE html> <html> <head>   <meta charset="utf-8">   <meta http-equiv="X-UA-Compatible" content="IE=edge">   <title>大文件切割上传</title>   <link rel="stylesheet" href="">   <script>     function selfile(){       const LENGTH = 1024 * 1024 * 10;//每次上传的大小       var file = document.getElementsByName('video')[0].files[0];//文件对象       var filename=document.getElementsByName('video')[0].files[0].name;       var totalSize = file.size;//文件总大小       var start = 0;//每次上传的开始字节       var end = start + LENGTH;//每次上传的结尾字节       var fd = null//创建表单数据对象       var blob = null;//二进制对象       var xhr = null;//xhr对象       while(start < totalSize){         fd = new FormData();//每一次需要重新创建         xhr = new XMLHttpRequest();//需要每次创建并设置参数         xhr.open('POST','upload.php',false);         blob = file.slice(start,end);//根据长度截取每次需要上传的数据         fd.append('video',blob);//添加数据到fd对象中         fd.append('filename',filename); //获取文件的名称         xhr.send(fd);//将fd数据上传          //重新设置开始和结尾         start = end;         end = start + LENGTH;        }      }   </script> </head> <body> <h2>大文件切割上传</h2> <input type="file" name="video" onchange="selfile();" /> </body> </html>

接收数据页面upload.php:

<?php   $filename = './uploads/'.$_POST['filename'];//确定上传的文件名 //第一次上传时没有文件,就创建文件,此后上传只需要把数据追加到此文件中 if(!file_exists($filename)){  move_uploaded_file($_FILES['video']['tmp_name'],$filename); }else{  file_put_contents($filename,file_get_contents($_FILES['video']['tmp_name']),FILE_APPEND); } ?>

测试之前,先创建uploads文件夹

如果是linux系统的话 切记给uploads给权限

sudo chmod -R 777 uoloads/  //赋予uploads文件夹 777 权限  -R 递归子文件

关于怎么在html中使用ajax上传大文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯