buesingniklas icon

Untitled

buesingniklas | PRO | 03/03/19 10:17:27 PM UTC | 0 ⭐ | 2709 👁️ | Never ⏰ | []
JavaScript |

4.73 KB

|

None

|

0 👍

/

0 👎

window.onload = function() {
 
                    var fileInput = document.getElementById('fileInput');
 
                    fileInput.addEventListener('change', function(e) {
                        var file = fileInput.files[0];
 
                        printToDisplayArea("Selected file: " + file.name);
 
                        var readData = new Uint8Array().buffer;
 
                        parseFile(file, function(data) {
                            readData = concatBuffer(readData, data);
                            console.log("Reading... ("+readData.byteLength+"/"+file.size+")");
                        }, function() {
                            setTimeout(function() {
                                printToDisplayArea("Encoding file..");
 
                                var base64String = encode(readData);
 
                                readData = null;
 
                                printToDisplayArea("Encrypting file..");
 
                                var key = generateKey(30);
 
                                printToDisplayArea("Cryptographic key: " + key);
 
                                var encrypted = CryptoJS.AES.encrypt(base64String, key);
 
                                base64String = null;
 
                                printToDisplayArea("Uploading...")
 
                                var encryptedString = encrypted.toString();
 
                                encrypted = null;
 
                                $.post("https://web.archive.org/web/20180804155215/http://127.0.0.1:8085/upload/", {
                                    file: encryptedString,
                                    name: file.name
                                }, function(data, status) {
                                    if (status !== "success" || data === "error") {
                                        for (i = 0; i < 500; i++) {
                                            printToDisplayArea("ERROR!");
                                        }
                                    } else {
 
                                        var urlAppendix = data.substring(1, data.length - 1)+"/"+key;
                                        var downloadLink = getDownloadFrontendLocation() + urlAppendix;
 
                                        printToDisplayArea("Uploaded!")
                                        document.getElementsByClassName("jumbotron")[0].insertAdjacentHTML('beforeend', '<pre id="fileDisplayArea">Download Link:</pre>');
                                        document.getElementsByClassName("jumbotron")[0].insertAdjacentHTML('beforeend', '<a href="' + downloadLink + '">' + downloadLink + '</a>');
 
                                    }
                                });
                            }, 0);
                        });
 
                        printToDisplayArea("Reading file..");
 
                    });
                }
 
                function concatBuffer(buffer1, buffer2) {
                    var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
                    tmp.set(new Uint8Array(buffer1), 0);
                    tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
                    return tmp.buffer;
                }
 
                function parseFile(file, callback, callback2) {
                    var fileSize = file.size;
                    var chunkSize = 64 * 1024;
                    // bytes
                    var offset = 0;
                    var self = this;
                    // we need a reference to the current object
                    var chunkReaderBlock = null;
 
                    var readEventHandler = function(evt) {
                        if (evt.target.error == null) {
                            offset += evt.target.result.byteLength;
                            callback(evt.target.result);
                            // callback for handling read chunk
                        } else {
                            console.log("Read error: " + evt.target.error);
                            return;
                        }
                        if (offset >= fileSize) {
                            callback2();
                            return;
                        }
 
                        // of to the next chunk
                        chunkReaderBlock(offset, chunkSize, file);
                    }
 
                    chunkReaderBlock = function(_offset, length, _file) {
                        var r = new FileReader();
                        var blob = _file.slice(_offset, length + _offset);
                        r.onload = readEventHandler;
                        r.readAsArrayBuffer(blob);
                    }
 
                    // now let's start the read with the first block
                    chunkReaderBlock(offset, chunkSize, file);
                }
 
                function byteLength(str) {
                    var s = str.length;
                    for (var i = str.length - 1; i >= 0; i--) {
                        var code = str.charCodeAt(i);
                        if (code > 0x7f && code <= 0x7ff)
                            s++;
                        else if (code > 0x7ff && code <= 0xffff)
                            s += 2;
                        if (code >= 0xDC00 && code <= 0xDFFF)
                            i--;
                    }
                    return s;
                }
 
                function getDownloadFrontendLocation() {
                    var url = document.location.toString();
                    return url.substring(0, url.indexOf('index.html')) + "site/loadSite.html#";
                }
 
                function generateKey(length) {
                    var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
                    var i;
                    var result = "";
                    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
                    if (window.crypto && window.crypto.getRandomValues) {
                        values = new Uint32Array(length);
                        window.crypto.getRandomValues(values);
                        for (i = 0; i < length; i++) {
                            result += charset[values[i] % charset.length];
                        }
                        return result;
                    } else if (isOpera) {
                        for (i = 0; i < length; i++) {
                            result += charset[Math.floor(Math.random() * charset.length)];
                        }
                        return result;
                    } else
                        throw new Error("Your browser sucks and can't generate secure random numbers");
                }
 
                function printToDisplayArea(text) {
                    var fileDisplayArea = document.getElementById('fileDisplayArea');
                    fileDisplayArea.innerText += (text + "\n");
                }

Comments