大檔案切片功能

2022-08-20 22:54:12 字數 2684 閱讀 5542

近期接到的新需求:上傳大檔案,因檔案上傳的大小不定,所以需要切片上傳

前端**:

import md5 from "js-md5";/**

* 快取轉換 匯入大檔案

* @param that this

* @param file 上傳檔案的物件

* @param size 每次上傳檔案的限制大小

* @param progress 上傳檔案的進度條

* @param url string 上傳檔案的url

* @param module_name string 上傳檔案的需要上文的檔名 */

export

function

uploadfile(that, file, size, progress, url, module_name) ;

//傳送檔案

function

sendfile(blob, file)

else

if (json.parse(xhr.response).code == 0)

else

if (json.parse(xhr.response).code == 2)

let t = settimeout(function

()

else

}, 1000);

}xhr.send(form_data);

}}

後端**:我們後端是用php完成的

<?php

if (!defined('basepath')) exit('no direct script access allowed');

header('content-type:text/html;charset=utf-8');

header('access-control-allow-origin:*');

class chunkupload extends

ci_controller

//大檔案分片上傳

public

function

bigfileupload()

if (empty($_post['module_name']))

if (empty($_post['blob_num']))

if (empty($_post['file_name']))

if (empty($_post['total_blob_num']))

if (empty($_files['file']))

if (empty($_files['file']['tmp_name']))

$filedir = './uploads/'.trim($_post['module_name'],'/').'/' . date('y/m/d');

$this->filepath = $filedir

;

$this->tmppath = $_files['file']['tmp_name'];

$this->blobnum = $_post['blob_num'];

$this->totalblobnum = $_post['total_blob_num'];

$this->filename = $_post['file_name'];

//校驗

$this->validate($_post['code'], $_post['file_name']);

//移動檔案

$this->movefile();

//合併分塊的檔案

$this->filemerge();

//響應狀態

$this->apireturn();

}//判斷是否是最後一塊,如果是則進行檔案合成並且刪除檔案塊

private

function

filemerge()

$ext = '.'.substr(strrchr($this->filename, '.'), 1);

$this->finalfilename = date('ymdhis') . rand('10000', '99999') . $ext

;

file_put_contents($this->filepath.'/'. $this->finalfilename,$blob

);

$this->deletefileblob();}}

//刪除檔案塊

private

function

deletefileblob()

}//移動檔案

private

function

movefile()

//api返回資料

public

function

apireturn()

}else}}

//建立上傳資料夾

private

function

touchdir()

}//引數校驗

private

function validate($code,$filename

)

}}function echo_json($code = 0, $msg = '', $data = array

())

大檔案切片上傳 Vue NodeJS

大檔案前台切成若干份2m小檔案,分別傳輸給後台,後台分別寫入硬碟,在最後一片被後台接收後,讀取所有切片並合併成為原始大檔案 主要實現兩種方式的大資料切片傳輸 前台切片,後台合併 node後台切片,另一伺服器端合併 大檔案上傳時,前端切片,上傳後,後端組合 先上介面 這裡定時,是做非同步序列,等上執行...

PHP大檔案上傳(切片上傳)

由於專案需要,經常要上傳幾百兆或者幾個g的檔案。考慮到檔案過大,直接上傳的話會超出php設定的表單提交限制大小,同時會占用較多的系統資源。於是考慮將檔案進行切片,然後將切片後的檔案統一上傳至檔案目錄,待全部上傳成功之後再將其合併成乙個檔案,同時後台md5驗證是否上傳成功。上面的思路是目前上傳大容量檔...

C FileStream複製大檔案功能

filestream緩衝讀取和寫入可以提高效能。每次複製檔案的一小段,以節省總記憶體開銷。當然,本機複製也可以採用.net內部的system.io.file.copy方法。filestream讀取檔案的時候,是先講流放入記憶體,經flash 方法後將記憶體中 緩衝中 的資料寫入檔案。如果檔案非常大,...