网页分块上传文件

这篇博客探讨了如何使用HTML5的FormData属性实现大文件的分块上传,并结合PHP进行处理。在nginx环境中,通过调整配置以支持大文件上传,同时检查了PHP的相关设置。示例中,一个2.3M的照片被分成1M大小的块,进行多次上传。
摘要由CSDN通过智能技术生成

之前工作中没有遇到过上传大文件的需求,因此今天抽时间研究了一下如何分块传输文件。这个demo很简单,大致明白原理就行了。

demo的环境:PHP5.5 + nginx
上传的文件为一张照片:2.3M 每次最多上传1M,大概要循环3次

1.nginx配置,为了提高处理性能,我们需要加大nginx的buffer

large_client_header_buffers 4 64K;//cookie等值比较大的时候需要扩大这个缓冲区
client_body_buffer_size 2M;//如果这个值小于上传的数据,则nginx会把数据写道临时文件,增加了额外的IO
client_max_body_size 2M;

2.同时检查PHP的配置

file_uploads    On
upload_max_filesize 2M

今天写的部分是html5中有个FormData属性下面直接贴代码:

    <div class="Main">
    <div class="header">header</div>
    <div>
        <input type="file" name="userfile" id="userfile" />
        <input type="button" name="button" id="submit" value="上传视屏"/>
    </div>
</div>
<script type="text/javascript">
   var sub = document.getElementById("submit"); 
   sub.onclick=function(){
      var file= document.getElementById("userfile").files[0];
      if (file == undefined) {
          alert("请上传文件");
          return false;
      }
      var each_chunck = 1024*1024;
      var start = end = 0;
      while(end < file.size) {
          end = start + each_chunck;
          data = file.slice(start, end);
          var fd = new FormData();
          fd.append('name', data);
          var xhr = new XMLHttpRequest();
          xhr.open('POST','/upload/updata',false);
          xhr.send(fd);
          start = end;
      }

   }
</script>   
 //对于PHP接收数据就按照平时的$_FILES接收就好了,如上我们获取临时文件名
 $_FILES['name']['tmp_name'];
 //对于接收的文件,我们试验的时候就是往一个文件追加内容就行了,当多机器环境下就需要使用分布式存储文件存储了。以后研究。
/*
 *下次就抽时间研究一下分布式文件和iframe分块上传文件吧。
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值