[如何将JavaScript File对象转换为字符串,然后转换回Node.js blob? (通过Cloud Function将文件上传到Firebase。)>

问题描述 投票:0回答:1

用例是通过云功能将文件从客户端浏览器上传到Firebase存储。

我可以使用元素在浏览器中获取File对象。

我可以使用blob.text()将文件转换为文本字符串。

我可以通过JavaScript将字符串从浏览器发送到可调用的Google Cloud Function。

我可以在Cloud Function中接收字符串,并使用Node.js中的file('path')。save(string)将字符串保存到Firebase(Cloud Storage)文件中。

但是,我似乎在翻译上确实失去了一些东西,因为当我在一个小的.png文件上尝试这种操作时,存储中的文件最终变得不可读,并且是586字节,而原始362字节。

我怀疑我没有考虑编码或类似内容?

我认为我的问题用上面的普通英语更容易理解,并且你们中的大多数人甚至都不会看到代码就可以识别我的错误,但是我认为突出我的错误的最小伪代码将是:

blob = targetFromHTMLFileInputElement;
newBlob = Buffer.from(blob.text());
if(blob == newBlob){
   console.log('Hey, it worked');
}
else{
   console.log("Why didn't you become a stripper instead?");
}

但是这里是我从所有身份验证和异步中解脱出来的最少的代码命令,而在实际用例中却没什么:

in JavaScript on the client browser:
   var inputElement = document.getElementById("fileInputField");
   var browserFile = inputElement.target.files[0];
   var browserString = await browserFile.text();
   var cloudUpload = firebase.functions().httpsCallable('cloudFunction');
   var response = await cloudUpload({fileString: browserString});

in Node.js on index.js on the Firebase project:
   var newString = Buffer.from(fileString);            
   const storageRef = admin.storage().bucket();
   var fileRef = await bucketRef.file('path/try.png');
   var saveTry = await fileRef.save(newString);

用例是通过Cloud Function将文件从客户端浏览器上传到Firebase存储。我可以使用元素在浏览器中获取File对象。我可以将文件转换为文本字符串...

javascript firebase upload google-cloud-functions firebase-storage
1个回答
0
投票

我很确定,使用text()将二进制PNG文件转换为文本不是最好的主意。您可能会丢失使它变成正确格式的图像的数据,除非您有某种方法可以在接收函数中将该字符串转换回二进制数据。

© www.soinside.com 2019 - 2024. All rights reserved.