我设置此线程是为了澄清firebase存储 putString 方法是还是不在React中工作-native。
根据我搜索的内容,目前无法使用 put 方法将文件或Blob类型上传到Firebase存储。
React Native不支持文件和Blob类型,因此Firebase存储上传将无法在此环境中运行。但文件下载确实有效。
消息来源:The Firebase Blog
因此这个电话
firebase.storage().ref()
.child(userID)
.put(new File(['this is a small amount of data'], 'sample-text.txt', { type: "text/plain" }), { type: "text/plain" })
.then(p => {console.log(p)})
.catch(p => {console.log(p)})
不起作用,最终得到回复
代码:"存储/未知"消息:" Firebase存储:未知错误 发生了,请检查服务器响应的错误有效负载。"名称 : " FirebaseError" serverResponse :" 多部分正文不包含2或 3部分。"
尽管如此,还是可以使用Firebase存储putString方法将数据上传到Firebase存储。哪个适用于普通字符串。但即使我使用这种方法上传。我和以前一样得到了相同的服务器响应。
firebase.storage()
.ref()
.child(userID)
.putString('string')
.then(p => {console.log(p)})
.catch(p => {console.log(p)});
来自我从this answer学到的知识。 putString 方式应工作。
我做错了什么?在React中,代码对我来说很好。每当我粘贴到React-native时。它停止工作。
答案 0 :(得分:6)
我之前刚刚尝试react-native-fetch-blob作为Ven评论过,我能够让它发挥作用,尝试使用示例中index file的这个代码段:
1)课前声明:
import RNFetchBlob from 'react-native-fetch-blob';
const Blob = RNFetchBlob.polyfill.Blob;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
2)在存储方法中:
let filePath = 'YOUR/FILE/PATH';
let fileName = 'file_name.jpg';
let rnfbURI = RNFetchBlob.wrap(filePath);
// create Blob from file path
Blob
.build(rnfbURI, { type : 'image/png;'})
.then((blob) => {
// upload image using Firebase SDK
firebase.storage()
.ref('images')
.child(fileName)
.put(blob, { contentType : 'image/jpg' })
.then((snapshot) => {
console.log('Uploaded', snapshot.totalBytes, 'bytes.');
console.log(snapshot.metadata);
var url = snapshot.metadata.downloadURLs[0];
console.log('File available at', url);
}).catch(function(error) {
console.error('Upload failed:', error);
});