Luc*_* N. 3 python google-app-engine flask
所以我试图将用 Flask 编写的 Python Web 应用程序移植到 Google App Engine。该应用程序托管用户上传的文件大小最大为 200mb,对于非图像文件,需要保留文件的原始名称。为了防止文件名冲突,例如两个人上传 stuff.zip,每个人都包含完全不同且不相关的内容,应用程序在文件系统上创建一个 UUID 文件夹并将文件存储在其中,并将其提供给用户。Google App Engine 的云存储,我计划使用它来存储用户文件,通过创建一个存储桶 - 根据他们的文档,“没有文件夹的概念”。在他们的系统中获得相同功能的最佳方法是什么?
目前的方法,仅用于演示:
# generates a new folder with a shortened UUID name to save files
# other than images to avoid filename conflicts
else:
# if there is a better way of doing this i'm not clever enough
# to figure it out
new_folder_name = shortuuid.uuid()[:9]
os.mkdir(
os.path.join(app.config['FILE_FOLDER'], new_folder_name))
file.save(
os.path.join(os.path.join(app.config['FILE_FOLDER'], new_folder_name), filename))
new_folder_path = os.path.join(
app.config['FILE_FOLDER'], new_folder_name)
return url_for('uploaded_file', new_folder_name=new_folder_name)
Run Code Online (Sandbox Code Playgroud)
来自Google Cloud Storage 客户端库概述文档:
GCS 和“子目录”
Google Cloud Storage 文档提到“子目录”,GCS 客户端库允许您在创建对象时提供子目录分隔符。然而,GCS 实际上并不将对象存储到任何真正的子目录中。相反,子目录只是对象文件名的一部分。例如,如果我有一个存储桶 my_bucket 并将文件存储在某个地方/over/the/rainbow.mp3,则文件rainbow.mp3 并不是真正存储在某个/over/the/ 的子目录中。它实际上是一个名为某处/over/the/rainbow.mp3 的文件。理解这一点对于使用 listbucket 过滤非常重要。
虽然 Cloud Storage 本身不支持子目录,但它允许您在 filenames 内使用子目录分隔符。这基本上意味着文件的路径仍然看起来就像在子目录中一样,即使它不是。显然,只有当您迭代存储桶的全部内容时,您才应该关心这一点。
来自请求 URI文档:
标准请求的 URI
对于大多数操作,您可以使用以下任一 URL 来访问对象:
storage.googleapis.com/<bucket>/<object>
<bucket>.storage.googleapis.com/<object>
这意味着他们的示例的公共 URL 将为http://storage.googleapis.com/my_bucket/somewhere/over/the/rainbow.mp3。他们的服务会将其解释为bucket=my_bucketand object=somewhere/over/the/rainbow.mp3(即没有子目录的概念,只是一个嵌入斜杠的对象名称);然而,浏览器只会看到路径/my_bucket/somewhere/over/the/rainbow.mp3并将其解释为文件名是rainbow.mp3.
| 归档时间: |
|
| 查看次数: |
2575 次 |
| 最近记录: |