Any Share — это простой, легкий и быстрый сервис обмена файлами. Он написан на Javascript и использует Firebase Платформа.

Веб-сайт, который я создал для безопасного обмена файлами с друзьями и семьей.

Вы можете создать свой собственный сайт с этим кодом.


Функции

  • Загрузить файлы
  • Скачать файлы
  • Удалить файлы
  • Делиться файлами
  • Просмотр файлов
  • Безопасный обмен файлами


Работающий

  • Any Share использует Firebase для хранения файлов. Он использует хранилище Firebase для хранения файлов и базу данных Firebase Realtime для хранения метаданных файлов.
  • Когда файл загружается, он сохраняется в хранилище Firebase, и для файла создается уникальный идентификатор. Этот идентификатор используется для доступа к файлу.
  • Метаданные файла хранятся в базе данных Firebase Realtime. Эти метаданные включают URL-адрес файла и уникальный идентификатор файла.
  • Когда файл является общим, уникальный идентификатор файла является общим. Этот идентификатор используется для доступа к файлу.
  • Получатель файла может получить доступ к файлу, используя уникальный идентификатор файла.
  • Когда файл получен получателем с использованием уникального идентификатора, файл загружается из хранилища Firebase и отображается получателю.
  • Как только файл получен получателем, он автоматически удаляется из хранилища Firebase.
  • Таким образом, файл передается безопасно.


Как использовать

  • Посещать Любая доля.
  • Загрузить файл.
  • Дождитесь загрузки файла.
  • Поделитесь уникальным идентификатором файла с получателем.
  • Получатель может получить доступ к файлу, используя уникальный идентификатор файла.
  • Как только файл получен получателем, он автоматически удаляется из хранилища Firebase.


Обзор кода

  • Код для загрузки хранилища Firebase
function uploadFile() {
    if(document.getElementById("file").value != ""){
    var uploadtext = document.getElementById("upload").innerHTML;
  document.getElementById("upload").innerHTML = "Uploading...";
  var file = document.getElementById("file").files[0];
  var storageRef = firebase.storage().ref("images/" + file.name);
  var uploadTask = storageRef.put(file);
  uploadTask.on('state_changed', function (snapshot) {
    var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
    console.log('Upload is ' + progress + '% done');
  }, function (error) {
    console.log(error.message);
    document.getElementById("upload").innerHTML = "Upload Failed";
  }, function () {


    uploadTask.snapshot.ref.getDownloadURL().then(function (downloadURL) {
      console.log('File available at', downloadURL);
      saveMessage(downloadURL);
    });
  });
}
else{
    var uploadtext = document.getElementById("upload").innerHTML;
    document.getElementById("upload").innerHTML = "Please select a file";
    // After 2 sec make it empty
    setTimeout(function(){
        document.getElementById("upload").innerHTML = uploadtext;
    }
    , 2000);
}
}

Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Код для загрузки хранилища Firebase
function showfile(){
var uniqueId= document.getElementById("unique").value;
    if(uniqueId==""){
        alert("Unique Id is empty\n Please enter a Unique Id");
        return;
    }
    var ref = firebase.database().ref("image");
    var flag = 0;
    ref.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
        var childData = childSnapshot.val();
        if (childData.number == uniqueId){

        flag = 1;
        window.open(childData.url, "_blank");
        // AFter this delete the image from the database
        ref.child(childSnapshot.key).remove();
        // Remove file from storage
        //Run this with 5sec delay
        setTimeout(function(){
        var storageRef = firebase.storage().refFromURL(childData.url);
        storageRef.delete().then(function() {
             ref.child(childSnapshot.key).remove();
        // File deleted successfully
        }).catch(function(error) {

        });
        }, 15000);


        }
        });
    }
    );
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


function createUniquenumber(){
    // Create a unique 5 digit number for each image which is not in the database field number yet
    var number = Math.floor(10000 + Math.random() * 90000);
    var ref = firebase.database().ref("image");
    ref.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
        var childData = childSnapshot.val();
        if (childData.number == number){
            createUniquenumber();
        }
        });
    });
    return number;


}
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Код для сохранения метаданных файла в базе данных Firebase Realtime
function saveMessage(downloadURL) {
    var newMessageRef = messagesRef.push();
    var unique= createUniquenumber();
    // Hidding recive file div
    var x = document.getElementById("downloadiv");
    x.style.display = "none";
    var showUnique = document.getElementById("ShowUniqueID");
    var shU=document.getElementById("showunique");
    shU.value=unique;
    showUnique.style.display = "block";

    newMessageRef.set({
        url: downloadURL,
        number: unique
    });
    document.getElementById("upload").innerHTML = "Upload Successful";
    //Make file input empty
    document.getElementById("file").value = "";

    }
Войти в полноэкранный режим

Выйти из полноэкранного режима


Вывод

  • В этом уроке я объяснил, как я создал свое собственное веб-приложение для обмена файлами.


использованная литература