【问题标题】:How to read file from BlobStore by name如何按名称从 BlobStore 读取文件
【发布时间】:2015-12-13 15:26:41
【问题描述】:

假设我有一些文件的上传表单,比如文档中的文件 https://cloud.google.com/appengine/docs/java/blobstore/

如果我将文件 file.txt 保存到 blobstore,如果我不知道它是 BlobKey,我如何从中获取它。更准确地说,我想通过这样的请求获取此文件:myapp.appspot.com/getfile?file_name=file.txt,我只想在此 url 上查看文件 file.txt

【问题讨论】:

    标签: java google-app-engine blobstore


    【解决方案1】:

    如果您使用 Blobstore,则必须在某处记住一个键才能检索 Blob。

    如果您使用 Blobstore 将文件存储在 Cloud Storage 中,则可以使用对象名称访问它们,该名称可以是已上传文件的原始名称。

    如果您的文件是公开的,您可以直接访问它:

    https://storage.googleapis.com/" + bucket + "/" + objectName
    

    如果你想先在你的应用中读取它,然后返回给客户端,那么你可以使用:

    String filename = "/gs/" + bucket + "/" + objectName;
    BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService();
    blobService.serve(blobService.createGsBlobKey(filename), response);
    

    【讨论】:

    • bucket 在这里是什么意思,我怎么知道我的文件是否公开?我只是使用<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post">" 上传它,而我在映射到/uploadUploadServlet 中几乎什么都不做
    • 抱歉,我以为您在使用 BlobstoreService 将对象存储在 Google Cloud Storage 中。我会更新我的答案。
    • 我尝试了您的解决方案https://storage.googleapis.com/" + bucket + "/" + objectName,但似乎存储桶中的文件的名称与我上传时的名称不同。那么我还需要为每个文件保存它(存储桶中的名称)吗?
    • 这取决于您上传文件的方式。如果您从自己的 servlet 将文件写入 Cloud Storage,则可以指定所需的文件名。但是,如果您使用“uploadUrl”将文件直接上传到云存储,不幸的是,据我所知,无法指定对象名称。
    • 但是我如何在没有uploadUrl 的情况下从我的servlet 上传一些文件到服务器上?基本上我想从我的服务器上上传一些文件file.txt,然后用它的名字下载它file.txt
    猜你喜欢
    • 2012-05-15
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2015-07-26
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多