因此,在客户端HTML页面中,用户选择一个文件并将其上传到JavaScript代码。 JavaScript会解析文件并将其发送到服务器,然后再发送回站点上的其他所有人。然后,每个客户端都会为该文件创建一个Blob下载链接。可以像这样将文件发送到服务器然后再发送回去很容易。
但是,现在,我想使该文件可供站点的将来用户使用,而不将其保存到某个位置。这是在聊天程序中的,因此我一直在将来自用户的消息作为字符串发送到数据库。我想创建一个程序,将上述File对象发送到尽可能短的字符串,然后根据该字符串在另一个客户端上重新创建文件(包括所有元数据)。
将Blob转换为字符串并再次返回而不丢失任何内容的标准方法是什么?如果有多种方法,那么最短的字符串会是什么?
答案 0 :(得分:0)
我找到了问题的答案,我不得不修改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的版本,然后创建一个锚标记来下载它。可能不是“正确”,但可以。