Как получить ссылку на фотографию из хранилища Firebase в Java, а не Android - PullRequest
0 голосов
/ 06 ноября 2019

Есть ли решение, как получить ссылку на фотографию из хранилища 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"));

Но я могуне получаю постоянную ссылку на фотографию из хранилища, ну в принципе как вариант, укажите 100 000 дней спасибо за помощь

чтобы я мог это сделать))

1 Ответ

0 голосов
/ 06 ноября 2019

URL-адреса загрузки - это механизм, специфичный для клиентских SDK Firebase и недоступный в серверных 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))));

Вы можете немного упростить это, поскольку SDK Firebase Admin предварительно создаст для вас экземпляр Storage.

Также взгляните на аналогичный ответ для Node.js: Получить URL-адрес загрузки из файла, загруженного с помощью облачных функций для Firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...