保存切片找不到html,HTML5切片,结果文件损坏

我有一个文件上传功能,并使用html5的切片api,我将每个文件切片为1MB块,但最终的结果导致文件被破坏。有时,最终结果会比原始文件小,有时即使是正确的大小,我仍然无法打开它。任何人有任何想法?或解决方案? 这是切片HTML5切片,结果文件损坏

var uploaders = [];

var i = 0;

$(document).ready(function() {

var progress = document.querySelector('progress');

var bars = document.querySelector('#bars');

});

//function for after the button is clicked, slice the file

//and call upload function

function sendRequest() {

//clean the screen

bars.innerHTML = '';

var blob = document.getElementById('fileToUpload').files[0];

var originalFileName = blob.name;

const BYTES_PER_CHUNK = 1 * 1024 * 1024; // 10MB chunk sizes.

const SIZE = blob.size;

var start = 0;

var end = BYTES_PER_CHUNK;

while(start < SIZE) {

if (blob.webkitSlice) {

var chunk = blob.webkitSlice(start, end);

} else if (blob.mozSlice) {

var chunk = blob.mozSlice(start, end);

}

uploadFile(chunk, originalFileName);

start = end;

end = start + BYTES_PER_CHUNK;

}

}

function uploadFile(blobFile, fileName) {

var progress = document.createElement('progress');

progress.min = 0;

progress.max = 100;

progress.value = 0;

bars.appendChild(progress);

var fd = new FormData();

fd.append("fileToUpload", blobFile);

var xhr = new XMLHttpRequest();

xhr.open("POST", "upload.php"+"?"+"file="+fileName + i, true);

i++;

xhr.onload = function(e) {

//make sure if finish progress bar at 100%

progress.value = 100;

//counter if everything is done using stack

uploaders.pop();

if (!uploaders.length) {

bars.appendChild(document.createElement('br'));

bars.appendChild(document.createTextNode('DONE :)'));

}

};

// Listen to the upload progress for each upload.

xhr.upload.onprogress = function(e) {;

if (e.lengthComputable) {

progress.value = (e.loaded/e.total) * 100;

}

};

uploaders.push(xhr);

xhr.send(fd);

}

的一部分,这是PHP文件接受二进制块

$target_path = "uploads/";

$tmp_name = $_FILES['fileToUpload']['tmp_name'];

$size = $_FILES['fileToUpload']['size'];

$name = $_FILES['fileToUpload']['name'];

$originalName = $_GET['file1'];

print_r("*******************************************\n");

print_r($originalName);

print_r("\n");

print_r($_FILES);

print_r("\n");

print_r("*******************************************\n");

$target_file = $target_path . basename($name);

//Result File

$complete = $originalName;

$com = fopen("uploads/".$complete, "ab");

error_log($target_path);

if ($com) {

// Read binary input stream and append it to temp file

$in = fopen($tmp_name, "rb");

if ($in) {

while ($buff = fread($in, 1048576)) {

fwrite($com, $buff);

}

}

fclose($in);

fclose($com);

}

?>

我想用我的PHP代码把文件时一起在服务器上我做错了什么(就像我没有把它整理一下),但是任何人都知道如何做到这一点或最佳做法?除了上传文件并将其合并之外,也可以在将文件写入文件之前先将其保存在内存中。

2012-03-13

Harts

+0

请提供您的上传进度的功能。什么是bars变量(一个div?)它没有在脚本中定义。您还忽略了上传变量是什么(是一个数组?) –

2012-03-15 20:34:25

+0

@Martin我刚刚更新了代码,这几乎是我有的所有代码..减去HTML文件上传的正常HTML标记的部分 –

2012-03-15 22:02:58

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值