当前位置: 首页 > 知识库问答 >
问题:

React Native Firebase Storage:base64和blob不工作

姜磊
2023-03-14

我正在尝试使用将我的图像文件编码为Bas64或Blob,但它们都不起作用。我还使用:https://github.com/react-community/react-native-image-picker来管理图像选择器。

尝试1:使用图像拾取器的<代码>。data方法,该方法应该返回base64字符串

const blah = uuid.v4();
firebase
  .storage()
  .ref('images')
  .child(`${blah}.jpg`)
  .putString(file.data, 'base64', { contentType: 'image/jpeg' })

但这会引发:Firebase存储:字符串与格式'Bas64'不匹配:找到无效字符

尝试2:Blob使用https://github.com/wkh237/react-native-fetch-blob

      const uri = file.uri;
      const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri
      data = RNFetchBlob.fs.readFile(uploadUri, 'base64')
      blob = RNFetchBlob.polyfill.Blob.build(data, { type: 'application/octet-stream;BASE64' })
      const uniqueId = uuid.v4();
      const firebaseRef = firebase.storage().ref('images').child(`${uniqueId}.jpg`)
      return Observable.fromPromise(firebaseRef.put(blob, { contentType: 'application/octet-stream;BASE64' }));
    })

但是,它返回:Firebase 存储索引 0 处的参数无效:预期的 blob 或文件。

尝试3:使用https://github.com/wkh237/react-native-fetch-blob的base64

      const uri = file.uri;
      const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri
      data = RNFetchBlob.fs.readFile(uploadUri, 'base64')
      const uniqueId = uuid.v4();
      const firebaseRef = firebase.storage().ref('images').child(`${uniqueId}.jpg`)
      const metadata= {
        contentType: 'image/jpeg',
      };
      firebaseRef.putString(data, 'base64', metadata);

但这再次抛出:Firebase存储:字符串与格式“base64”不匹配:发现无效字符

有人知道我做错了什么吗?

共有2个答案

慕承允
2023-03-14

关于(尝试1)您必须使用“数据url”:

.putString(file.data, 'data_url', { contentType: 'image/jpeg' })
范承教
2023-03-14

回到我使用版本5.5.6的时候,最近我更新到版本6.2.0,遇到了同样的问题。

const uri = Platform.OS === 'ios' ? response.uri.replace('file://', '') : response.uri
const imageRef = storage().ref('images/').child("blah")
await imageRef.put(uri)
const imageUrl = await imageRef.getDownloadURL()

我刚刚将. app更改为. puFile,一切都恢复了正常

 类似资料:
  • 我正在处理一个Azure存储项目,其中我需要在容器中上传和下载blob,并在列表框中列出容器和blob。我无法在我的列表框中显示容器和blob。 最后是我调用上传、下载和列表方法的接口背后的代码:

  • 我有以下代码来创建一个从画布到数据URL的Blob dataURItoBlob=(dataURI)- 这在chrome/ff/opera中运行良好。但当我在IPAD os 6.1中尝试时,新的Blob返回[object Uint8Array]在IOS 6.1中有问题吗 谢啦

  • 我创建了一个Azure blob触发器函数来压缩一个blob中的图像,并将压缩后的图像复制到另一个blob中。在第一次运行时,它为现有blob触发,但当我删除输出blob存储并重新创建它时,正常工作的应用程序不会为现有blob触发。 是否有任何方法可以为现有blob触发此函数?

  • 早些时候,我在没有使用sas授权的情况下获得了一个blob。 但现在我只希望那些用户能够访问拥有sas令牌的blob。 假设我想访问一个文件 现在我也有了SAS令牌。所以新的url应该是 我接下来要做什么,这样只有那些有第二个链接的人才能去获取文件? 我必须在 Azure 门户中进行哪些更改? 我想我在客户端需要做的唯一改变就是URL。我需要用包含sas令牌的URl替换没有sas令牌的URl。

  • 当我最近开始与混在一起时,我遇到了一种情况,在 但无法从他们那里得到一个清晰的想法。简而言之,。任何帮助都将不胜感激。

  • 伙计们,你们能帮帮忙吗 所以我正在尝试显示我从后端获得的数据,但似乎 *ngFor 不起作用,只想返回启用的大小如何使用 ngIf 这是模板 这是我得到的数据(我正在循环的部分) 所以我需要显示每个尺寸的价格,然后减去折扣,如果未启用,则显示隐藏该尺寸。