2017-08-07 159 views
0

我是新来的firebase和上传图片firebase.storage有点麻烦。将图片上传到firebase从ReactNative

在我的应用我有一个形象,当我CONSOLE.LOG它,我得到这个:

file:///Users/waltermonecke/Library/Developer/CoreSimulator/Devices/B38A76A…6E2-5EE0F4B38878/Documents/images/F6DFDD32-A741-446B-B035-F8407197421C.jpg 

所以基本上到.jpg图像的参考。现在,我要上传它,这是我的代码至今:

let img = job.photo1.uri; 
console.log(img) // See above 

let storageRef = firebase.storage().ref(`/jobs/${currentUser.uid}`); 
storageRef.put(img); 

我认为这将是足够的,但我清楚地失去了一些东西,因为我收到此错误信息:

Firebase Storage: Invalid argument in `put` at index 0: Expected Blob or File. 

谢谢非常提前任何帮助。

回答

1

storageRef.put接受Blob而不是字符串。 React native没有内置的方法将图像文件转换为Blob,因此您可以使用react-native-fetch-blob库来实现此目的。

Blob.build(img, { 
     type: "image/png;" 
}).then(blob => { 
    firebase 
    .storage() 
    .ref(`/jobs/${currentUser.uid}`) 
    .put(blob, { contentType: "image/png" }) 
    .then(snapshot => { 
     // Done upload 
     blob.close(); 
    }); 
+0

谢谢您的回答,但我没有看到一个'.build'方法在Blob对象中。 –

0

取决于你正在使用您的火力集成什么库......假设react-native-firebase,这应该工作:

firebase 
.storage() 
.ref(`/jobs/${currentUser.uid}`) 
.putFile(img) 
.on(
    'state_changed', 
    (snapshot) => { 
    console.log(snapshot); 
    }, 
    err => { 
    console.error(err) 
    }, 
    (uploadedFile) => { 
    console.log(uploadedFile) 
    } 
); 
+0

我正在使用firebase,我尝试了putFile方法。但是,它似乎不是一个有效的方法调用。 '_firebase2.default.storage(...)。ref(...)。putFile不是一个函数' –

+0

您是否使用此软件包? https://github.com/invertase/react-native-firebase这就是我最初引用的那个....我知道这不是一个完整的答案,但我已经很轻松地使用了它。 – gtfargo