java - 使用 Blobstore API 将文件上传到谷歌云存储

标签 java google-app-engine file-upload google-cloud-storage blobstore

我正在尝试将文件从浏览器上传到 GCS。 我正在使用 blobstore API 上传文件。

我浏览了文档,但找不到如何将 blob 上传到 GCS。

如何从 blobkey 获取文件,以便将其上传到 GCS。

JSP 端

 <form action="<%= blobstoreService.createUploadUrl("/upload") %>"
       method="post" enctype="multipart/form-data">
   <input type="file" name="myFile">
   <input type="submit" value="Submit">
 </form>

servlet端

 Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
 BlobKey blobKey = blobs.get("myFile");
 GcsService gcsService = GcsServiceFactory.createGcsService();
 GcsFilename filename = new GcsFilename(BUCKETNAME, "exampleFile");
 GcsFileOptions options = new GcsFileOptions.Builder().mimeType("text/plain")
                          .acl("authenticated-read")
                          .addUserMetadata("myfield1", "my field value")
                          .build();
 gcsService.createOrReplace(filename, options, /*File from the blob key */);

任何人都可以帮助我如何将文件保存到 GCS 中吗?

最佳答案

在浏览了 java 文档之后,我能够弄清楚 如何将 blob 和多个 blob 文件上传到 gcs。

<form action="<%= blobstoreService.createUploadUrl("/upload") %>"
   method="post" enctype="multipart/form-data">
 <input type="file" name="myFile">
 <input type="file" name="myFile2">
 <input type="file" name="myFile3">
 <input type="submit" value="Submit">
</form>

servlet 端

而不是获取上传的 blobkey 信息

Map<String, List<BlobKey>> blobkeylist = blobstoreService.getUploads(request);

我得到了 blobInfos

Map<String, List<BlobInfo>> blobsData = blobstoreService.getBlobInfos(request);
for (String key : blobsData.keySet())
    {
        for(BlobInfo blob:blobsData.get(key))
        {
            byte[] b = new byte[(int)blob.getSize()];
            BlobstoreInputStream in = new BlobstoreInputStream(blob.getBlobKey());
            in.read(b);

            GcsService gcsService = GcsServiceFactory.createGcsService();
            GcsFilename filename = new GcsFilename(BUCKETNAME, "/testFolder3/"+blob.getFilename());
            GcsFileOptions options = new GcsFileOptions.Builder()
            .mimeType(blob.getContentType())
            .acl("authenticated-read")
            .addUserMetadata("myfield1", "my field value")
            .build();

            gcsService.createOrReplace(filename, options,ByteBuffer.wrap(b));
            in.close();
        }
    }

这个成功了。 我不确定这是否是最佳解决方案,但它确实有效。

关于java - 使用 Blobstore API 将文件上传到谷歌云存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24205046/

相关文章:

java - IPv6 被编码在请求参数中

java - 两个 eclipse 工作区之间的 Websphere AS 冲突

python - Virtualenv __future__ 模块在命令行上工作,但在运行 dev_appserver.py 时不起作用

java - 请求不包含 Java 文件 uploader 中的 multipart/form-data 或 multipart/mixed 流

java - 上传到S3时如何设置内容类型和内容编码?

java - 如何删除 Spring Boot 中属性文件中的重复项?

java - 如何从java中的字符串时间戳中提取日期和时间

java - GAE/J 数据存储备份

google-app-engine - GAE go 只提供本地主机上的路径而不是域

javascript - 在 Electron 中,如何从完整文件名上传文件