java - 使用 Java 将文件上传到 Cloud Storage for Firebase

标签 java google-cloud-storage

我想使用 java 服务器将文件添加到我的 Google Cloud Storage(实际上是 Firebase 存储桶)。

我正在使用我在互联网上获得的代码:

    // Authenticate using a service account
    Storage storage;
    try {
        storage = StorageOptions.newBuilder()
                .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("C:/tmp/firebasekey.json")))
                .build()
                .getService();
        // The name for the new bucket
        String bucketName = "MinhaSaude";

        // Creates the new bucket
        Bucket bucket = storage.create(BucketInfo.of(bucketName));
        // Create blob
        BlobId blobId = BlobId.of("bucket", "blob_name");
        // Add metadata to the blob
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
        // Upload blob to GCS (same as Firebase Storage)
        Blob blob = storage.create(blobInfo, "Hello, Cloud Storage!".getBytes());

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我收到的返回的是 Bucket bucket = storage.create(BucketInfo.of(bucketName));

之后的错误

“无效的存储桶名称:'MinhaSaude'” }

或“存储桶“minhasaude-api”的帐户已被禁用。”

我找不到满足谷歌要求的存储桶名称。我已经使用浏览器将文件上传到 Firebase,并且上传正常。

最佳答案

尝试使用我的代码,它对我有用

String filename =  httpRequest.getFirstQueryParameter("name").get();
    String contentType =  httpRequest.getFirstQueryParameter("content-type").get();

    ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("key.json").getFile());
    FileInputStream serviceAccount = new FileInputStream(file);

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setStorageBucket("<you bucket name>")
            .build();

    FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);
    Bucket bucket = StorageClient.getInstance(firebaseApp).bucket();


    Storage storage = StorageOptions.newBuilder().setProjectId("firebaseId")
            .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(file)))
            .build()
            .getService();
    file = new File(classLoader.getResource("jar-loading.gif").getFile());

    InputStream inputStream = new FileInputStream(file);
    BlobInfo blobInfo = BlobInfo.newBuilder(bucket.getName(), filename)
            .setContentType(contentType).build();

    try (WriteChannel writer = storage.writer(blobInfo)) {
        byte[] buffer = new byte[1024];
        int limit;
        try {
            while ((limit = inputStream.read(buffer)) >= 0) {
                writer.write(ByteBuffer.wrap(buffer, 0, limit));
            }

        } catch (Exception ex) {
            // handle exception
        } finally {
            writer.close();
        }
    }

使用该代码,我可以将 gif 文件从我的项目上传到 firebase 存储。进行更改以使用它

关于java - 使用 Java 将文件上传到 Cloud Storage for Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221966/

相关文章:

java - 如何将 pdf 文件存储在谷歌云存储上?

java - 尝试从 Google Cloud Java 项目访问 DoubleClick Bid Manager 合作伙伴特定的私有(private)存储桶时出现状态代码 403

java - 启动新线程而不是放入队列

java - 使用 toString() 方法打印 String Array 对象的编号列表

java servlet在JSP中获取cookie值

Java将二维数组传递给方法

google-cloud-storage - 附加了永久性磁盘的实例的 Google Compute Engine 快照失败

python - google.auth.exceptions.RefreshError

google-cloud-storage - 将文件和文件夹从Google存储桶下载到本地文件夹

java - 从文件中对 ArrayList 进行排序