首页 > 编程语言 >php切片上传

php切片上传

时间:2022-11-22 11:07:45浏览次数:30  
标签:chunk per 切片 tmpName file var php 上传 size

由来:在上传文件过程中,如果文件过大第一占用服务器带宽,所以为了减少网络代码,提高用户体验度在客户端【浏览器】首先将资源【图片,资源】使用分页原理将资源切分,然后上传至服务器,最后服务器进行合并,形成图片

1.前端代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="./jquery.js"></script>
</head>
<body>
<div id="per_box" style="width: 350px; height: 15px; background-color: #cccccc">
<div id="per" style="width: 0%; height: 100%; background-color: #007CD5"></div>
<span id="per_num"></span>
</div>
<br />
<input type="file" name="file_tag" id="file_tag">
<input type="button" value="上传" id = "upload_btn">
</body>
</html>

<script>
$(document).ready(function(){
$("#upload_btn").click(function(){
var files = $("#file_tag")[0].files[0];
if(!files){
$("#file_tag").trigger("click");
}
var chunk;//当前页面数值
upload(files);
});


function upload(file){
var tmpName = file.size+"_chunk";
var every_size=1024*1024;//每一页传递的数据
var chunks = Math.ceil(file.size /every_size);//一共多少页
chunk = window.localStorage.getItem(tmpName) || 1;
chunk = parseInt(chunk);

var offset = (chunk-1) * every_size;//开始位置
var limit = chunk * every_size > file.size ? file.size : chunk * every_size;
var page = file.slice(offset,limit);//获取一页的数据

var form = new FormData();//这是一个表单的对象
form.append("page",page);//类似于一个input框
form.append("filename",file.name);//文件名字

var per = (limit/file.size * 100).toFixed(1);

$.ajax({
type : "post",
data:form,
processData : false,//取消服务器对上传文件线程控制
contentType : false,//取消服务器设置上传文件的类型
cache : false,//不需要服务器设置缓存
dataType : 'json',
url : "/upload.php",
success:function(msg){
if(chunk >= chunks ){
$("#per").css({width:"100%"});
$("#per_num").text(100+"%");
}else{
chunk++;
window.localStorage.setItem(tmpName,chunk);
$("#per").css({width:per+"%"});
$("#per_num").text(per+"%");
upload(file);
}
}
});
}
});
</script>

2.后端代码

$baseFileName = $_REQUEST['filename'];
$ext = explode(".",$baseFileName)[1];
$fileName=explode(".",$baseFileName)[0];

$arr = $_FILES['page'];
$tmpName = $arr['tmp_name'];
$content = file_get_contents($tmpName);
$fileName = "./{$fileName}.{$ext}";
file_put_contents($fileName,$content,FILE_APPEND);

$arr = array(
'error'=>0,
);
echo json_encode($arr);

 

标签:chunk,per,切片,tmpName,file,var,php,上传,size
From: https://blog.51cto.com/u_11635800/5877041

相关文章

  • 用php入门网络编程
    学习思路以下是我对学习网络编程的一个简单的学习思路,之后我将会按照这个计划去逐步学习网络编程相关的知识。step1.原生php实现TCPServer->原生php实现http协议->掌......
  • php-socket
    网络中是如何通信数据传输?ip+端口+协议实现网络进程之间的通信,几乎所有的应用程序都是采用socket,“一切皆socket”。HTTPTCPSOCKET区别Http协议:对应于应用层。Http协......
  • 极客编程python入门-切片
    切片取一个list或tuple的部分元素是非常常见的操作。>>>L=['Michael','Sarah','Tracy','Bob','Jack']>>>[L[0],L[1],L[2]]['Michael','Sarah','Tracy']Python提......
  • Git-上传所有文件
    gitstatusgitadd-Agitcommit-a-m"firstcommit"gitpushgitadd-A提交所有变化gitadd-u提交被修改(modified)和被删除(deleted)文件,不包括新文件(new......
  • mac 上使用ssh-copy-id 上传公钥 实现不输入密码登录
    1、准备ssh-copy-idbrewinstallssh-copy-id2、生成私钥公钥ssh-keygen-trsa-b10243、将公钥上传致服务器(~/.ssh/authorized_keys)ssh-copy-id-i公钥[email protected].......
  • php 在LINUX下创建目录失败的解决方法
    mkdir(APP_PATH.'tempinfo/getport/'.$config_name,0777,true);创建多级目录时使用参考https://jingyan.baidu.com/article/63acb44ac8ec5861fdc17e4d.html......
  • PHP 新特性 linux安装ssh2
    p7新特性p7新特性http://www.aichengxu.com/view/5446277 已经云http://www.lai18.com/content/2442224.html 已经云p7安装ssh2http://www.mobibrw.com/2016/4049//ssh2最......
  • MacOS12安装Homebrew、PHP8.0
    MacOS12安装HomebrewMacOS12Monterey已经不自带PHP了,所以手动安装PHP首先安装Homebrew在控制台输入以下命令,使用国内源安装,亲测不光速度快,而且自动装一些必要的依赖;并且......
  • php伪协议
        https://www.cnblogs.com/linfangnan/p/13535097.html#:~:text=PHP%20%E4%BC%AA%E5%8D%8F%E8%AE%AE%20%E6%98%AF%20PHP%20%E6%94%AF%E6%8C%81%E7%9A%84%E5%8......
  • 在PHP中,使用函数define()来定义常量 可设置大小号是否敏感等
    在PHP中,使用函数define()来定义常量。其语法如下:1booldefine(stringname,mixedvalue[,boolcase_insensitive]);说明:define函数有3个参数,第一个参数为常量名称,即标......