Skip to content

Instantly share code, notes, and snippets.

@alpyol
Forked from shiawuen/index.html
Created June 4, 2020 13:54
Show Gist options
  • Select an option

  • Save alpyol/d7d36c5bb793b8f2f248d2ccb5a7e8f0 to your computer and use it in GitHub Desktop.

Select an option

Save alpyol/d7d36c5bb793b8f2f248d2ccb5a7e8f0 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Dec 29, 2011.
    12 changes: 12 additions & 0 deletions index.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
    <meta charset="UTF-8">
    <title>test upload by chunk</title>
    </head>
    <body>
    <input type="file" id="f" />

    <script src="script.js"></script>
    </body>
    </html>
    67 changes: 67 additions & 0 deletions script.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    (function() {

    var f = document.getElementById('f');

    if (f.files.length)
    processFile();

    f.addEventListener('change', processFile, false);


    function processFile(e) {
    var file = f.files[0];
    var size = file.size;
    var sliceSize = 256;
    var start = 0;

    setTimeout(loop, 1);

    function loop() {
    var end = start + sliceSize;

    if (size - end < 0) {
    end = size;
    }

    var s = slice(file, start, end);

    send(s, start, end);

    if (end < size) {
    start += sliceSize;
    setTimeout(loop, 1);
    }
    }
    }


    function send(piece, start, end) {
    var formdata = new FormData();
    var xhr = new XMLHttpRequest();

    xhr.open('POST', '/upload', true);

    formdata.append('start', start);
    formdata.append('end', end);
    formdata.append('file', piece);

    xhr.send(formdata);
    }

    /**
    * Formalize file.slice
    */

    function slice(file, start, end) {
    var slice = file.mozSlice ? file.mozSlice :
    file.webkitSlice ? file.webkitSlice :
    file.slice ? file.slice : noop;

    return slice.bind(file)(start, end);
    }

    function noop() {

    }

    })();