【问题标题】:How to get the download url after uploading a file to firebase storage in springboot如何在springboot中将文件上传到firebase存储后获取下载url
【发布时间】:2021-01-14 06:28:55
【问题描述】:

我正在尝试将图像上传到 Firebase 存储并将下载 URL 保存在我的数据库中。但是,与在 android 中执行上传不同,我找不到在 springboot 中获取下载 Url 的方法。保存媒体 URL 不起作用,因为它没有访问令牌。下面是我用来将图片上传到 firebase 的代码。

File file = convertMultiPartToFile(multipartFile);
        Path filePath = file.toPath();
        String objectName = generateFileName(multipartFile);

        BlobId blobId = BlobId.of(bucketName, objectName);
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
        Blob blob = storage.create(blobInfo, Files.readAllBytes(filePath));
        log.info("File " + filePath + " uploaded to bucket " + bucketName + " as " + objectName);
        return blob.getMediaLink();

【问题讨论】:

  • 嗨 Ruli,如果我没记错的话,这个答案是关于它是如何在 android 中完成的。我正在尝试使用使用 springboot 实现的服务器上传图像

标签: firebase spring-boot firebase-storage


【解决方案1】:

默认情况下,Firebase 不会在服务帐户上返回任何下载 URL,直到在客户端 SDK 中,因此,您可以做的是,按照 Firebase 约定构建自己的下载 URL。

`https://firebasestorage.googleapis.com/v0/b/<bucket name>/o/%s?alt=media`

`<bucket name>` = Firebase Storage Bucket Name
`%s` = The media name (file name)

【讨论】:

    【解决方案2】:

    本周我在开发负责将文件上传到 Firebase 并检索可下载 URL 以将其保存在数据库中的端点时遇到了同样的问题。 Firebase Admin Java JDK 似乎没有提供任何功能来直接检索刚刚上传的文件的可下载 URL 或检索访问令牌以使其成为可能。虽然有一个属性配置为名为“firebaseStorageDownloadTokens”的元数据,在文件上传到 Firebase 后可以找到该属性并存储授权下载文件所需的令牌,但它仍然无法正常工作,因为没有为所有人检索此属性请求,老实说,我找不到它发生的原因。无论如何,对我有用的解决方案是在上传文件之前添加“firebaseStorageDownloadTokens”定向作为 BlobInfo 的元数据。它将使 Firebase 将传递的值假定为正在上传的文件的访问令牌,并且一旦处理此信息,就可以构建可下载的 URL。

    在你的场景中,它会是这样的:

    File file = convertMultiPartToFile(multipartFile);
        Path filePath = file.toPath();
        String objectName = generateFileName(multipartFile);
    
        BlobId blobId = BlobId.of(bucketName, objectName);
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setMetadata(Map.of("firebaseStorageDownloadTokens","randomAccessToken")).build();
        Blob blob = storage.create(blobInfo, Files.readAllBytes(filePath));
        log.info("File " + filePath + " uploaded to bucket " + bucketName + " as " + objectName);
        return blob.getMediaLink().concat("&token=randomAccessToken");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 2018-01-24
      • 2018-12-30
      • 2018-11-07
      • 2017-07-08
      • 2020-05-24
      • 2021-08-12
      相关资源
      最近更新 更多