Firebase 原型链错误时反应本机可枚举键
我试图将base64映像上载到Firebase存储,但出现以下错误: assign的一个源在原型链上有一个可枚举键。您正在尝试分配原型属性吗?我们不允许这样做,因为这是一个我们不支持的边缘案例 继续EXPO@19.0.0(与v18上的问题相同)和React@16.0.0-alpha.12(世博会v19附带) 我使用的函数如下 资料来源:Firebase 原型链错误时反应本机可枚举键,firebase,react-native,firebase-storage,expo,Firebase,React Native,Firebase Storage,Expo,我试图将base64映像上载到Firebase存储,但出现以下错误: assign的一个源在原型链上有一个可枚举键。您正在尝试分配原型属性吗?我们不允许这样做,因为这是一个我们不支持的边缘案例 继续EXPO@19.0.0(与v18上的问题相同)和React@16.0.0-alpha.12(世博会v19附带) 我使用的函数如下 资料来源: const addSignService=(signData,imageAsBase64,文件名)=>{ _uploadAsByteArray(convertT
const addSignService=(signData,imageAsBase64,文件名)=>{
_uploadAsByteArray(convertToByteArray(imageAsBase64)),文件名,(进度)=>{
console.log(“上传asbytearray回调”+进度);
//this.setState({progress})
});
}
const\u uploadAsByteArray=async(pickerResultAsByteArray,filename,progressCallback)=>{
console.log(“u uploadAsByteArray”);
试一试{
变量元数据={
contentType:“图像/jpeg”,
};
var ref=storageRef.child('images/'+firebaseAuth().currentUser.uid+'/'+filename);
console.log('before upload');
让uploadTask=ref.put(pickerResultAsByteArray,元数据);
uploadTask.on('state_changed',函数(快照){
progressCallback&&progressCallback(snapshot.ByTestTransfered/snapshot.totalBytes)
var progress=(snapshot.bytesttransfered/snapshot.totalBytes)*100;
log('Upload is'+progress+'%done');
console.log(“日志测试”);
},函数(错误){
log(“in\u uploadAsByteArray”,错误);
},函数(){
console.log('function');
var downloadURL=uploadTask.snapshot.downloadURL;
console.log(“\u uploadAsByteArray”,uploadTask.snapshot.downloadURL)
});
}捕获(ee){
log(“当试图加载时,上传asbytearray”,ee)
}
}
const convertToByteArray=(输入)=>{
log('convertToByteArray');
var二进制字符串=atob(输入);
var len=二进制字符串长度;
var字节=新的Uint8Array(len);
对于(变量i=0;i{
console.log('atob');
常量字符='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789+/=';
设str=input.replace(/=+$/,“”);
让输出=“”;
如果(str.length%4==1){
抛出新错误(“'atob'失败:要解码的字符串编码不正确。”);
}
对于(设bc=0,bs=0,buffer,i=0;
buffer=str.charAt(i++);
~buffer&(bs=bc%4?bs*64+buffer:buffer,
bc++%4)?输出+=String.fromCharCode(255&bs>>(-2*bc&6)):0
) {
缓冲区=字符索引(缓冲区);
}
返回输出;
}
当调用
Firebase.put()
激活React Native/iOS远程调试器时,将出现此错误。停用调试器解决了错误,并且函数工作正常
感谢Github上的aaronksaunders提供的帮助。
刚刚把我从兔子洞里救了出来。谢谢
const addSignService = (signData, imageAsBase64, filename) => {
_uploadAsByteArray(convertToByteArray(imageAsBase64), filename, (progress) => {
console.log('_uploadAsByteArray callback '+progress);
//this.setState({ progress })
});
}
const _uploadAsByteArray = async (pickerResultAsByteArray, filename, progressCallback) => {
console.log('_uploadAsByteArray');
try {
var metadata = {
contentType: 'image/jpeg',
};
var ref = storageRef.child('images/'+ firebaseAuth().currentUser.uid + '/' + filename);
console.log('before upload');
let uploadTask = ref.put(pickerResultAsByteArray, metadata);
uploadTask.on('state_changed', function (snapshot) {
progressCallback && progressCallback(snapshot.bytesTransferred / snapshot.totalBytes)
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log('Upload is ' + progress + '% done');
console.log('log test');
}, function (error) {
console.log("in _uploadAsByteArray ", error);
}, function () {
console.log('function');
var downloadURL = uploadTask.snapshot.downloadURL;
console.log("_uploadAsByteArray ", uploadTask.snapshot.downloadURL)
});
} catch (ee) {
console.log("when trying to load _uploadAsByteArray ", ee)
}
}
const convertToByteArray = (input) => {
console.log('convertToByteArray');
var binary_string = atob(input);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes
}
const atob = (input) => {
console.log('atob');
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
let str = input.replace(/=+$/, '');
let output = '';
if (str.length % 4 == 1) {
throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");
}
for (let bc = 0, bs = 0, buffer, i = 0;
buffer = str.charAt(i++);
~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
) {
buffer = chars.indexOf(buffer);
}
return output;
}