使用Google Cloud Storag提供文件的Python应用引擎

2024-06-29 00:47:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前使用以下代码允许我的用户上传文件

uploadurl = blobstore.create_upload_url('/process?session=' + session, gs_bucket_name='mybucketname')

我可以为这样的形象服务

^{pr2}$

在使用第一个代码片段中的方法上传内容后,blob键包含encoded_gs_file:,这就是它知道如何从Google云服务而不是blobstore作为标准服务的方式。在

但是,我不确定如何提供其他类型的文件(例如.pdf或.rtf)。我不想让内容显示在浏览器中,而是作为下载发送到客户机(这样他们就可以看到“保存文件”对话框,并在计算机上选择一个位置来保存它)。在

我该怎么做呢?谢谢。在


Tags: 文件代码用户namegsurl内容bucket
2条回答

我将根据@voscausa的回答回答回答我自己的问题

这是我的处理程序的样子(在一个名为view.py的文件中)

class DynServe(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, resource):
    blob_key = resource

    if not blobstore.get(blob_key):
        logging.warning('Blob NOT FOUND %s' % resource)
        self.abort(404)
        return
    else:
        blob_info = blobstore.BlobInfo.get(blob_key)

    self.send_blob(blob_key, save_as=blob_info.filename)    

我们需要这个在app.yaml

^{pr2}$

secure: always是可选的,但我总是在处理用户数据时使用它。在

把这个放在view.py的底部

app = webapp.WSGIApplication([('/download/([^/]+)?', DynServe),
                                 ], debug=False)

现在请访问/下载/BLOB\ukey_。(您可以检查数据存储中的blob密钥)

这是一个可以同时使用标准blob商店和Google云服务的完整示例。在

注意:属于GCS一部分的所有blob键都将以encoded_gs_file:开头,而那些不在标准blobstore中的blob键将自动使用它来确定文件的位置

使用谷歌服务网址只对图片有效。在

要从blobstore提供pdf,您可以使用:

class DynServe(blobstore_handlers.BlobstoreDownloadHandler):

    def get(self, resource):

        (blob_key, extension) = resource.rpartition('.')[::2]
        blob_info = blobstore.BlobInfo.get(blob_key)
        if not blob_info:
            logging.error('Blob NOT FOUND %s' % resource)
            self.abort(404)

        self.response.headers[b'Content-Type'] = mimetypes.guess_type(blob_info.filename)
        self.send_blob(blob_key, save_as=blob_info.filename)

此处理程序的webapp2路由如下所示:

^{pr2}$

服务:

<a href="/dynserve/<blob_key>.pdf">PDF download</a>

相关问题 更多 >