Самый быстрый способ отправить файл в строку и обратно в файл в JavaScript - PullRequest
0 голосов
/ 24 января 2019

Таким образом, на клиентской HTML-странице пользователь выбирает файл и загружает его в код JavaScript. JavaScript анализирует файл и отправляет его на сервер и обратно всем, кто находится на сайте. Затем каждый клиент создает ссылку для загрузки BLOB-файла. Это легко, когда я могу отправить файл на сервер и обратно вот так.

Но теперь я хочу сделать этот файл доступным для будущих пользователей сайта, не сохраняя его в определенном месте. Это в программе чата, поэтому я отправляю сообщения от пользователей в виде строк в базу данных. Я хотел бы создать программу для отправки вышеупомянутого объекта File в кратчайшую возможную строку, а затем заново создать файл (включая все метаданные) на другом клиенте из этой строки.

Каков стандартный способ преобразования BLOB-объекта в строку и обратно без потери чего-либо? Если есть несколько способов, что приводит к самой короткой строке?

1 Ответ

0 голосов
/ 24 января 2019

Я нашел ответ на свой вопрос, мне пришлось изменить некоторые другие ответы из SO вопросов, которые касались только моего вопроса.Вот что я нашел:

Это на клиенте загрузки, в функции, вызываемой при загрузке файла:

let inp = document.getElementById("file_input");
let reader = new FileReader();
reader.onload = function(){
    send_off_to_other_clients(reader.result);
}
reader.readAsBinaryString(inp.files[0]);

На других клиентах:

<script>
    function get_blob_from_string (string, type, name) {
        let array = new Uint8Array(string.length);
        for (let i = 0; i < string.length; i++){
            array[i] = string.charCodeAt(i);
        }
        let end_file = new Blob([array], {type: type, name: name});
        let a = document.createElement("a");
        a.href = URL.createObjectURL(end_file);
        a.download = name;
        a.target = "_blank";
        a.click();
    }
</script>

end_file - это версия, возвращаемая в BLOB-объект, и затем я создаю тег привязки для его загрузки.Возможно, это не "правильно", но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...