前台部分

 <div class="col-md-12">

            <div class="form-group">
<label class="control-label col-sm-2">申请人材料zip包</label>
<div class="input-box col-sm-6">
<input class="btn btn-default" type="file" name="zipupload" id='zipupload' >
<input type="hidden" id="file_zip_path" value=''/>
<span>
{foreach from=$upfiles[2] item=item}
<span>
<a href="{$item.dir}" target="_blank">{$item.file_name}</a>
<a href="javascript:void(0);" class="btn btn-default btn-sm" title="删除"<i class="glyphicon glyphicon-trash"></i></a>
</span>
{/foreach} </span>
<span class="text-danger">上传的文件类型只支持zip格式</span>
</div>
<div class="zipparse" id="zipparse"></div> <div class="input-prompt col-sm-4 zipupload_error" for="research_field">
<div class="progress progress-striped">
<div id="filebar" class="progress-bar progress-bar-success" role="progressbar"
aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
style="width: 0%;">
0%
</div>
</div>
zip格式
</div>
</div> </div>
<input type="hidden" name="url_class" id="url_class" value="ps/project">
<input type="hidden" name="url_func" id="url_func" value="modify">
<input type="hidden" name="proj_id" id="proj_id" value="{$proj_id}">
<input type="hidden" name="ptype" id="ptype" value="{$ptype}">

js部分

<script type="text/javascript">
var index=0;
var uploadId="";
$(function(){
//onchange="getImg(this, '{$base_url}ps/project/projectAttachZip',4,{$proj_id},{$ptype})"
var zipfiles=$("#zipupload"); zipfiles.change(function(){
var files = this.files; //获取上传文件的对象
var file = files[0]; 
sizes = file.size; //文件大小 if (file.type!='application/zip') {
alert('您当前的上传类型不对,请上传zip格式');
return false;
} blockSize = 1024 * 1024 * 2;//块大小
var blockCount = Math.ceil(sizes / blockSize);//总块数
//创建FormData对象
var formData = new FormData();
formData.append('fileName', file.name);//文件名
formData.append('total', blockCount);//总块数
formData.append('index', index);//当前上传的块下标
formData.append('uploadId', uploadId);//块文件名
formData.append('data', null);
UploadFile(file, formData, sizes, blockCount, blockSize);
}); }); function UploadFile(file, formData, sizes, blockCount, blockSize){ var start=index*blockSize;
var end = Math.min(sizes, start + blockSize);//获取结束块的大小 if (sizes<blockSize) {
var block = file.slice(0, sizes); //分割块
} else {
var block = file.slice(start, end); //分割块
} formData.set('proj_id', $('#proj_id').val()); //评审id
formData.set('ptype', $('#ptype').val());//评审类型
formData.set('data', block); //块
formData.set('index', index); //当前块
formData.set('uploadId', uploadId); //块id
$.ajax({
url: '/ps/project/ziptests',
type: 'post',
data: formData,
processData: false, //数据转换为对象
contentType: false, //数据类型
dataType:'json',
success: function (res) { block = null;
if (res.Code === 1) {
if (index === 1)
uploadId = res.UploadID; $('#filebar').css('width',(index / blockCount * 100).toFixed(2) + '%');
$('#filebar').text((index / blockCount * 100).toFixed(2) + '%');
//上传完毕后开始解析文件内容
if ((index / blockCount * 100).toFixed(2)==100) {
$("#file_zip_path").val(res.Path); $("#zipparse").wrap("<form id='ajaxupload' action='#' method='post' ></form>"); {literal}
$('#ajaxupload').ajaxSubmit({
url: '#',
dataType: "json", //返回结果格式
type: 'post',
data: {file_path:$("#file_zip_path").val(),proj_id:$("#proj_id").val(),ptype:$("#ptype").val()}, //请求数据
success: function (json) { $('.zipupload_error').html('<img src="/app/static/smartadmin/1.9.1/img/select2-spinner.gif" style="width: 50px"><span style="color: red">解析中......</span>');
$.smallBox({
title : json.message,
content : "<i class='fa fa-clock-o'></i> 解析成功",
color : "#739e73",
iconSmall: "fa fa-times fadeInRight",
timeout : 4000
}); $('.zipupload_error').html('<span>'+json.message+'</span>'); }, }); }
if (index < blockCount) {
index++;
UploadFile(file, formData, sizes, blockCount, blockSize);
}
}
}
});
} </script>

后台部分

  //header('Content-type: application/json');
$post=$this->input->post();
$UploadID='';
//首次上传
if ($post['UploadID']=='') {
$UploadID=$post['index'];
}
//文件名称
$blockName = $UploadID.'.block';
//文件上传路径
$dir=APPPATH.'data/zip/'.intval($post['proj_id']).'/';
$dir_path='/data/zip/'.intval($post['proj_id']).'/';
mkDirs($dir);
if (file_exists($dir.$post['fileName'])) {
unlink($dir.$post['fileName']);
}
//块文件
$blockpath=$dir.$blockName;
if (file_exists($blockpath)) {
echo json_encode(["Code"=>1, "Msg" => "文件已经存在~"]);
}
$data=file_get_contents($_FILES['data']['tmp_name']); //写块文件
file_put_contents($blockpath,$data);
//合并块文件
if ($post['index']==$post['total']) {
$bloacks='';
$ext=pathinfo($post['fileName'],PATHINFO_EXTENSION);
$filename=$dir.date('ymdhis',time()).'.'.$ext;
$filename_path=$dir_path.date('ymdhis',time()).'.'.$ext; for($i=0;$i<=$post['total'];$i++) { $bloacks.=file_get_contents($dir.$i.'.block');
unlink($dir.$i.'.block'); //echo $dir.md5($i).'_'.$i.'.block';
}
file_put_contents($filename,$bloacks); } echo json_encode(["Code"=>1, "Msg" => "上传成功~",'Path'=>$filename_path]);

zip解压部分

 /**
* 文件编码
*
* @param [type] $fileName
* @return void
*/
function encodesutf8($name){
$encoding = mb_detect_encoding($name,['UTF-8','GBK','BIG5','CP936']); //获取编码 然后转换
if (DIRECTORY_SEPARATOR == '/'){ //linux widnwos下面是/
$filename = iconv($encoding,'UTF-8',$fileName);
}else{ //win
$filename = iconv($encoding,'GBK',$fileName);
}
return $filename;
}
header('content-type:text/html;charset=utf-8'); $proj_id=(int)$this->input->get('proj_id');
$ptype=(int)$this->input->get('ptype');
if($this->input->get('act') == 'do') { // $config['upload_path'] = FCPATH.'data/upload/zip/';
// mkDirs($config['upload_path']);
// $config['allowed_types']= array('zip');
// $config['file_name'] = time().$_FILES['zipupload']['name'];
// $this->load->library('upload',$config); // if(!$this->upload->do_upload('zipupload')){
// $this->smarty->error('评审意见表文件格式不符合规定');
// } // $data=array(
// 'filename'=>$_FILES['zipupload']['name'],
// 'filepath'=>'/data/upload/zip/'.$this->upload->file_name,
// ); $proj_id=(int)$this->input->post('proj_id');
$ptype=(int)$this->input->post('ptype');
$file_path=$this->input->post('file_path'); $path=APPPATH.'data/upload/upfile/'; $zip = new \ZipArchive;
//$zipfile = APPPATH.'/data/upload/zip/'.$this->upload->file_name;
$zipfile=APPPATH.$file_path; if (file_exists($zipfile)) { $zip->open($zipfile);
$prefix_path="/data/upload/upfile/";
if(!file_exists($path)) {
mkDirs($path);
} $docnum = $zip->numFiles; $annex=[
'proj_id'=>$proj_id,
'type'=>$ptype,
]; $num_co=0;
for($i = 0; $i < $docnum; $i++) {
//获取所有的文件
//$statInfo = $zip->getNameIndex($i);
$statInfos = $zip->statIndex($i,\ZipArchive::FL_ENC_RAW); $statInfo=$this->transcoding($statInfos['name']);
$exit=array_filter(explode('/',$statInfo)); //第一个是项目名称 第二个是申请名称 第三个是 附件材料 if (count($exit)>=3) {
$file_name=$exit[count($exit)-2]; //不用pathinfo是因为中文处理不好
$file_arr=explode('_',$file_name);
//获取是否出现以编号为结尾的文件夹名称 if (empty($per_info)) {
continue;
} copy('zip://'.$zipfile.'#'.$zip->getNameIndex($i), $path.$statInfo); } else { continue;
} } if (count($bool)==$num_co) { $this->smarty->success(basename($file_path),"#/ps/person/lists?proj_id=".$proj_id."&ptype=".$ptype);
} else {
$this->smarty->error($this->$oObject->data_error());
}
}
}

php 断点续传以及100% 后台zip解压的更多相关文章

  1. CentOS7下zip解压和unzip压缩文件

    1.安装zip.unzip应用. yum install zip unzip

  2. MySQL For Windows Zip解压版安装

    前言 Windows 下 MySQL 有msi和zip解压安装版两种,而zip版只需解压并做简单配置后就能使用,我个人比较喜欢这种方式. 注意我们这里说的MySQL是指MySQL服务器,有很多初学的同 ...

  3. 解决ubuntu中zip解压的中文乱码问题

    转自解决ubuntu中zip解压的中文乱码问题 在我的ubuntu12.10中,发现显示中文基本都是正常的,只有在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码 ...

  4. JAVA zip解压 MALFORMED 错误

    最近在在使用zip 解压时,使用JDK1.7及以上版本在解压时,某些文件会报异常 Exception in thread "main" java.lang.IllegalArgum ...

  5. windows下tomcat zip解压版安装方法

    下面记录一下在win7(32位)系统下,安装zip解压版的方法: 一.下载zip压缩包 地址:http://tomcat.apache.org/download-80.cgi 二.解压 我把解压包解压 ...

  6. 【转载】在linux下别用zip 用tar来压缩文件 zip解压后还是utf-8 window10是GBK

    3.2 使用 unzip 命令解压缩 zip 文件 将 shiyanlou.zip 解压到当前目录:   $ unzip shiyanlou.zip 使用安静模式,将文件解压到指定目录:   $ un ...

  7. Java zip解压,并遍历zip中的配置文件 .cfg或.properties

    1.解析cfg或properties配置文件 讲配置文件,读取,并封装成为map类型数据 /** * 解析cfg文件 * * @param cfgFile * @return */ public st ...

  8. ubuntu zip解压

    您好,zip xx.zip压缩,unzip xx.zip 解压,tar zcvf xx.tar.gz压缩tar zxvf xx.tar.gz解压

  9. zip 解压脚本

    zip 解压脚本 gpk-unzip.py #!/usr/bin/env python # -*- coding: utf-8 -*- # unzip-gbk.py import os import ...

随机推荐

  1. matlab中for 用来重复指定次数的 for 循环

    参考:https://ww2.mathworks.cn/help/matlab/ref/for.html?searchHighlight=for&s_tid=doc_srchtitle for ...

  2. P2832 行路难

    题面 Link 题目背景 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述 山区有 \(n\) 座山.山之间有 \(m\) 条羊肠小道,每条连接两座山,只能单向通过, ...

  3. 【题解】[SDOI2017]数字表格

    Link #include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=1e6; in ...

  4. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

  5. 洛谷P1450 [HAOI2008]硬币购物 背包+容斥

    无限背包+容斥? 观察数据范围,可重背包无法通过,假设没有数量限制,利用用无限背包 进行预处理,因为实际硬币数有限,考虑减掉多加的部分 如何减?利用容斥原理,减掉不符合第一枚硬币数的,第二枚,依次类推 ...

  6. CAD& CG 2020 胡事民教授—开源框架Jittor的创新与探索

    题目:深度学习框架"计图"的创新与探索 报告人:胡事民 报告人简介:胡事民,清华大学计算机系教授,主要研究方向为计算机图形学.虚拟现实.智能信息处理和系统软件等. 报告简介:深度学 ...

  7. shell-逻辑操作符讲解与文件条件测试多范例多生产案例

    1. 逻辑操作符 在书写测试表达式时,可以使用表1.1中的逻辑操作符实现复杂的条件测试  表1.1逻辑连接符 提示: ! 中文意思是反:与一个逻辑值相反的逻辑值 -a 中文意思是与(and & ...

  8. VS2019 配置opencv4.4

    安装VS2019 参考:链接 下载opencv 链接 下载此时的最新版4.4.0 最后"上墙"下,不然很慢! 安装opencv 我的安装位置是:D:\soft\opencv\ins ...

  9. 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  10. 多测师讲解自动化测试 _pybot.bat批处理脚本_高级讲师肖sir