php - html5 block 和 webworker 不上传任何内容

标签 php javascript html file web-worker

我正在使用 html5 slice 和 webworker,但是当它转到 uploadFile 函数时,没有任何反应。没有上传任何内容

<html>
    <head>
        <title>Upload Files using XMLHttpRequest</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>     
    </head>

    <body>
        <form id="fileuploader" enctype="multipart/form-data" method="post" action="upload.php">
            <label for="fileToUpload">Select Files to Upload</label><br />

            <input type="file" name="fileToUpload[]" multiple="" id="fileToUpload" onchange="fileList();"/><br />

            <input type="button" onclick="sendRequest();" value="Upload" />

            <!-- a place for File Listing -->
            <div id="fileList">              
            </div>           
        </form>
    </body>
</html>

<script type="text/javascript">

    function sendRequest() {
    var worker = new Worker("fileupload.js");

    worker.onmessage = function(e) {
        alert(e.data);
    }

    var file = document.getElementById('fileToUpload');

    for(var i = 0; i < file.files.length; i++) { 
        worker.postMessage(file.files[i]);  
    }
}

以及 fileupload.js

var file;
var p = true;

function uploadFile(blobFile, fileName, filePart, totalChunks) {         
    var xhr = new XMLHttpRequest();                
    xhr.open("POST", "upload.php"+"?"+"file="+fileName + filePart, true);

    xhr.onload = function(e) {
    };


    xhr.send(blobFile);
}   

function process() {
    var blob = file;
    var originalFileName = blob.name;
    var filePart = 0

    const BYTES_PER_CHUNK = 100 * 1024 * 1024; // 100MB chunk sizes.
    var realFileSize = blob.size;

    var start = 0;
    var end = BYTES_PER_CHUNK;

    totalChunks = Math.ceil(realFileSize / BYTES_PER_CHUNK);

    while( start < realFileSize ) {
        //self.postMessage(start);
        //self.postMessage("test");

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

        uploadFile(chunk, originalFileName, filePart, totalChunks);

        filePart++;
        start = end;
        end = start + BYTES_PER_CHUNK;
    }
}


self.onmessage = function(e) {
    file = e.data;
    /*for (var j = 0; j < e.data.length; j++) {
        files.push(e.data[j]);
    }*/

    if (p) {
        process();
    }
}

最佳答案

总结您的代码:

 if (!blob.webkitSlice && !blob.mozSlice) {
     var chunk = blob.mozSlice(start, end);
     // or: var chunk = blob.webkitSlice(start, end);
 }

这是您收到错误的行,很明显您需要在那里获得异常。

当然,对于这些浏览器的旧版本,您可能应该检查前缀函数。但如果“功能”检测不匹配,您将需要使用普通函数 - 可能是因为那些 vendor 已经删除了前缀,或者代码是在其他浏览器(Opera、IE)中执行的。另请参阅Browser compatibility: Notes on the slice() implementations at MDN .

所以,使用这个:

var slice = blob.webkitSlice || blob.mozSlice || blob.slice;
var chunk = slice.call(blob, start, end);

关于php - html5 block 和 webworker 不上传任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870127/

相关文章:

php - 比较日期时间提前 1 小时

javascript - 街道未定义javascript中的错误

javascript - 在 Backbone.js 的 View 初始化方法中调用外部函数

php - PDO连接登录

php - 使用 PHP 解压/提取 zip 文件而不依赖任何扩展

css - 一个只有一个导航条码页面的 HTML5 页面怎么可能只使用 html 和 CSS?

html - 将所有流量重定向到网页以强制 http ://www

javascript - 从单选按钮传递变量

php、mysql选择

javascript - 功能只工作一次