Django Google App Engine没有这样的文件或目录

时间:2018-08-16 01:07:14

标签: django google-app-engine google-cloud-platform google-cloud-storage gcloud

我在Google Cloud中有一个带python 3.6的Django 2.x站点,该应用程序位于app engine flex中。 (我的第一个应用程序:)

我的应用程序有一个上传页面,我要求用户上传一个JSON文件(该文件从未保存在网站中),我要做的是打开该文件并从中生成另一个文件

我知道django取决于它进入内存的文件的大小,但是我永远无法使用此功能,因此我在本地环境中所做的就是创建一个名为temp_reports的文件夹,因此我创建了此处的文件,将它们上传到存储桶中,然后从temp_reports中删除。

所以我在想,因为该站点已经在gcloud中,是否可以直接将这些文件创建到存储桶中?还是我仍然需要在网站中生成它们然后上传它们?

现在,如果它来自我的网站,我会不断收到以下错误消息:

异常值:

[Errno 2] No such file or directory: '/home/vmagent/app/temp_reports/file_516A3E1B80334372ADB440681BB5F030.xlsx

我进入了我的app.yaml

handlers:
- url: /temp_reports
  static_dir: temp_reports

我缺少什么吗?为了使用temp_reports?

或者如何直接在存储桶中创建文件?

1 个答案:

答案 0 :(得分:1)

您当然可以使用存储桶,而无需手动上传文件。这可以通过Google Cloud Storage客户端库(首选方法)完成。它允许您直接从存储桶中存储和检索数据。其次,您可以使用Cloud Storage API来执行相同的功能,但是需要更多的努力来进行设置。

您要使用google.cloud.storage.blob.Blob中的upload_from_string方法。

    upload_from_string(data, content_type='text/plain', client=None, 
    predefined_acl=None)

因此,要直接在存储桶上创建文本文件,您可以执行以下操作:

     storage_client = storage.Client()
     bucket = storage_client.get_bucket(‘mybucket’)
     blob = bucket.blob(‘mytextfile.txt’)
     blob.upload_from_string('Text file contents', content_type='text/plain')

有关更多信息,请参阅以下页面:

https://googleapis.github.io/google-cloud-python/latest/storage/blobs.html#google.cloud.storage.blob.Blob.upload_from_string