使用 html5 分块上传文件 [英] uploading a file in chunks using html5
本文介绍了使用 html5 分块上传文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 html5 的文件 API 分块上传文件,然后在服务器端用 php 重新组装它.我正在上传视频,但是当我在服务器端合并文件时,大小增加了,它变成了无效文件.请注意以下 html5 代码仅适用于浏览器 chrome .在 Chrome 9 中测试,因为它使用文件 API 的切片功能.有人可以指导我吗?谢谢
PHP 源码
HTML 源代码
<头><title>使用 XMLHttpRequest 上传文件</title><script type="text/javascript">window.BlobBuilder = window.MozBlobBuilder ||window.WebKitBlobBuilder ||窗口.BlobBuilder;函数发送请求(){var blob = document.getElementById('fileToUpload').files[0];const BYTES_PER_CHUNK = 1048576;//1MB 块大小.const SIZE = blob.size;无功开始= 0;var end = BYTES_PER_CHUNK;而(开始<大小){var chunk = blob.slice(start, end);上传文件(块);开始=结束;结束 = 开始 + BYTES_PER_CHUNK;}}函数文件选择(){var file = document.getElementById('fileToUpload').files[0];如果(文件){变量文件大小 = 0;如果(文件大小 > 1024 * 1024)fileSize = (Math.round(file.size * 100/(1024 * 1024))/100).toString() + 'MB';别的fileSize = (Math.round(file.size * 100/1024)/100).toString() + 'KB';document.getElementById('fileName').innerHTML = 'Name:' + file.name;document.getElementById('fileSize').innerHTML = 'Size:' + fileSize;document.getElementById('fileType').innerHTML = 'Type:' + file.type;}}函数上传文件(blobFile){//var file = document.getElementById('fileToUpload').files[0];var fd = new FormData();fd.append("fileToUpload", blobFile);var xhr = new XMLHttpRequest();xhr.upload.addEventListener("progress", uploadProgress, false);xhr.addEventListener("load", uploadComplete, false);xhr.addEventListener("error", uploadFailed, false);xhr.addEventListener("abort", uploadCanceled, false);xhr.open("POST", "upload.php");xhr.onload = 函数(e){警报(加载!");};xhr.send(fd);//警报(结束");}函数上传进度(evt){如果(evt.lengthComputable){var percentComplete = Math.round(evt.loaded * 100/evt.total);document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';}别的 {document.getElementById('progressNumber').innerHTML = '无法计算';}}函数上传完成(evt){/* 当服务器发回响应时引发此事件 */警报(evt.target.responseText);}功能上传失败(evt){alert("尝试上传文件时出错.");}功能上传取消(evt){xhr.abort();xhr = 空;//alert("上传已被用户取消或浏览器断开连接.");}头部><身体><form id="form1" enctype="multipart/form-data" method="post" action="upload.php"><div class="row"><label for="fileToUpload">选择要上传的文件</label><br/><input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/><input type="button" value="cancel" onClick="uploadCanceled();"/>
<div id="文件名"></div><div id="文件大小"></div><div id="文件类型"></div><div class="row"><input type="button" onclick="sendRequest();"值=上传"/>
<div id="progressNumber"></div></表单>