Сохранение изображений подушек из PDF на Google Cloud Server - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над веб-приложением Django, которое принимает файлы PDF и выполняет некоторую обработку изображений для каждой страницы PDF-файлов. Мне дали PDF, и мне нужно сохранить каждую страницу в моем облачном хранилище Google. Я использую pdf2image 'convert_from_path(), чтобы создать список изображений подушек для каждой страницы в PDF. Теперь я хочу сохранить эти изображения в облачных хранилищах Google, но не могу понять.

Я успешно сохранил эти изображения подушек локально, но не знаю, как это сделать в облаке.

fullURL = file.pdf.url
client = storage.Client()
bucket = client.get_bucket('name-of-my-bucket')
blob = bucket.blob(file.pdf.name[:-4] + '/')
blob.upload_from_string('', content_type='application/x-www-form-urlencoded;charset=UTF-8')
pages = convert_from_path(fullURL, 400)
for i,page in enumerate(pages):
    blob = bucket.blob(file.pdf.name[:-4] + '/' + str(i) + '.jpg')
    blob.upload_from_string('', content_type='image/jpeg')
    outfile = file.pdf.name[:-4] + '/' + str(i) + '.jpg'
    page.save(outfile)
    of = open(outfile, 'rb')
    blob.upload_from_file(of)

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Так что начните с того, что вы не используете 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)
0 голосов
/ 03 апреля 2019

Поскольку вы сохранили файлы локально, они будут доступны в вашем локальном каталоге, где запущено веб-приложение.

То, что вы можете сделать, это просто перебирать файлы этого каталога и загружать их в облачное хранилище Google по одному.

Вот пример кода:

Вам понадобится эта библиотека:

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, и он работал для меня. Возьмите идею о том, как она работает, и измените ее в соответствии с вашими потребностями. Я надеюсь, что это было полезно.

...