用例是通过云功能将文件从客户端浏览器上传到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对象。我可以将文件转换为文本字符串...
我很确定,使用text()
将二进制PNG文件转换为文本不是最好的主意。您可能会丢失使它变成正确格式的图像的数据,除非您有某种方法可以在接收函数中将该字符串转换回二进制数据。