【问题标题】:How to get the link of the photo from firebase storage in java, not android如何从java中的firebase存储中获取照片的链接,而不是android
【发布时间】:2019-11-06 05:35:38
【问题描述】:

有没有解决方案如何从firebase存储中获取照片的链接,只有java,而不是android?

我有 -

    FileInputStream serviceAccount = new 
    FileInputStream("./serviceAccountKey.json");

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setStorageBucket("g-app-af0af.appspot.com")
            .build();
    FirebaseApp.initializeApp(options);
            Bucket bucket = StorageClient.getInstance().
                   bucket("g-app-af0af.appspot.com");

我可以上传照片

    InputStream testFile = new FileInputStream("./12.png");
    String blobString = "test_folder/" + "12.png";

    Blob blob = bucket.create(blobString, testFile, "image/png", 
                Bucket.BlobWriteOption.userProject("g-app-af0af"));

我可以得到链接,但它是暂时的,我需要永恒的!!!

    String bucketName = "g-app-af0af.appspot.com";
    String blobName = "test_folder/12.png";
    String keyPath = "./serviceAccountKey.json";
    URL signedUrl = blob.getStorage().signUrl(BlobInfo.newBuilder(bucketName, 
    blobName).build(),
            14, TimeUnit.SECONDS, 
    Storage.SignUrlOption.signWith(ServiceAccountCredentials.fromStream(
                    new FileInputStream(keyPath))));
    System.out.println(signedUrl);

可以删除下载就好了

     Blob blob1 = bucket.getStorage().get(BlobId.of(bucketName, blobName));
     blob1.downloadTo(Paths.get("./zz.png"));
     bucket.getStorage().delete(bucketName, blobName, 
                  Storage.BlobSourceOption.userProject("g-app-af0af"));

但我无法从存储中获取到照片的永久 url 链接,嗯,原则上,作为一个选项,指定 100,000 天 感谢您的帮助

这样我才能做到))

【问题讨论】:

标签: java firebase firebase-storage


【解决方案1】:

下载网址是 Firebase 客户端 SDK 特有的一种机制,在服务器端 SDK 中不可用。

在服务器端 SDK 上最接近的等价物是 signed URL,您可以通过调用 Storage.signUrl 来获取 Java。来自here的例子:

Storage storage = StorageOptions.getDefaultInstance().getService();
String bucketName = "[BUCKET_NAME]";
String blobName = "[BLOB_NAME]";
String keyPath = "[PATH_TO_KEY]";
URL signedUrl = storage.signUrl(BlobInfo.newBuilder(bucketName, blobName).build(), 
        14, TimeUnit.DAYS, SignUrlOption.signWith(ServiceAccountCredentials.fromStream(
        new FileInputStream(keyPath))));

您可以稍微简化一下,因为 Firebase Admin SDK 会为您预先创建 Storage 实例。

还可以查看 Node.js 的类似答案:Get Download URL from file uploaded with Cloud Functions for Firebase

【讨论】:

  • 非常感谢您的帮助)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 2017-12-02
  • 2019-06-08
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
相关资源
最近更新 更多