java - 如何从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 天,感谢您的帮助
这样我就可以做到))
解决方案
下载 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
推荐阅读
- android - Maven:com.android.support:support-annotations:28.0.0 的依赖收敛错误
- sails.js - 无法获取新创建的记录sails js的id
- html - 为什么我不能将鼠标悬停在
- c++ - 如果删除了未使用的 ref 类,则 DLL 无法加载
- javascript - 仅当我从项目文件夹中删除 all.js 时,字体真棒图标才会变成正方形
- unix - 如何使用 awk 或 sed 根据分隔符复制列并拆分另一列?
- python-3.x - Jupyter notebook 和 python3 不工作(安装了 miniconda 3.7 包)
- c++ - 如何在没有动态转换的覆盖函数中使用派生参数
- c++ - 转发引用是否仍然是右值引用?
- npm - npm package.json:如何包装长的单个函数脚本?