将枕头图像从PDF保存到Google Cloud Server

时间:2019-04-02 21:24:14

标签: python django google-cloud-platform python-imaging-library

我正在开发一个Django Web应用程序,该应用程序接收PDF文件并对PDF的每一页进行一些图像处理。我得到了PDF,并且需要将每个页面保存到我的Google Cloud Storage中。我正在使用pdf2image的{​​{1}}为PDF中的每一页生成枕头图像列表。现在,我想将这些图像保存到Google Cloud Storages中,但是我无法弄清楚。

我已经在本地成功保存了这些Pillow图像,但是我不知道如何在云中执行此操作。

convert_from_path()

2 个答案:

答案 0 :(得分:0)

由于您已将文件保存在本地,所以它们在运行Web应用程序的本地目录中可用。

您可以做的只是简单地遍历该目录中的文件,并将它们一个接一个地上传到Google Cloud Storage。

以下是示例代码:

您将需要此库:

google-cloud-storage

Python代码:

#Libraries
import os
from google.cloud import storage

#Public variable declarations:
bucket_name = "[BUCKET_NAME]"
local_directory = "local/directory/of/the/files/for/uploading/"
bucket_directory = "uploaded/files/" #Where the files will be uploaded in the bucket

#Upload file from source to destination
def upload_blob(source_file_name, destination_blob_name):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)

    blob.upload_from_filename(source_file_name)

#Iterate through all files in that directory and upload one by one using the same filename
def upload_files():
    for filename in os.listdir(local_directory):
        upload_blob(local_directory + filename, bucket_directory + filename)
    return "File uploaded!"

#Call this function in your code:
upload_files()

注意:我已经在Google App Engine网络应用程序中测试了代码,并且对我有用。考虑一下它是如何工作的,并根据需要进行修改。我希望这会有所帮助。

答案 1 :(得分:0)

因此,首先不要使用blobstore。他们正在努力获得 摆脱它,让人们使用云存储。首先设置云存储

https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/setting-up-cloud-storage

我使用的是webapp2而不是Django,但我敢肯定您可以弄清楚。另外,我不使用枕头图片,因此您必须打开要上传的图片。然后执行以下操作(假设您正在尝试发布数据):

  import cloudstorage as gcs
  import io
  import StringIO 
  from google.appengine.api import app_identity

在获取和发布自己的部分之前

     def create_file(self, filename, Dacontents):

    write_retry_params = gcs.RetryParams(backoff_factor=1.1)
    gcs_file = gcs.open(filename,
                        'w',
                        content_type='image/jpeg',
                        options={'x-goog-meta-foo': 'foo',
                                'x-goog-meta-bar': 'bar'},
                        retry_params=write_retry_params)
    gcs_file.write(Dacontents)
    gcs_file.close()

进入您的HTML

   <form action="/(whatever yoururl is)" method="post"enctype="multipart/form-data">
  <input type="file" name="orders"/>
   <input type="submit"/>
    </form>

发帖中

    orders=self.request.POST.get(‘orders)#this is for webapp2

    bucket_name = os.environ.get('BUCKET_NAME',app_identity.get_default_gcs_bucket_name())
    bucket = '/' + bucket_name
    OpenOrders=orders.file.read()
    if OpenOrders:
        filename = bucket + '/whateverYouWantToCallIt'            
        self.create_file(filename,OpenOrders)