Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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");
- }
Advertisement
Add Comment
Please, Sign In to add comment