首页 > 解决方案 > 如何从java中的firebase存储中获取照片的链接,而不是android

问题描述

有没有解决方案如何从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 天,感谢您的帮助

这样我就可以做到))

标签: javafirebasefirebase-storage

解决方案


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

服务器端 SDK 上最接近的等价物是签名 URL,您可以通过调用 Java 来获得它Storage.signUrl这里的一个例子:

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 upload with Cloud Functions for Firebase


推荐阅读