Поток октетов в PDF Azure Python - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь загрузить PDF-файл в хранилище BLOB-объектов Azure, а затем загрузить и прочитать его. Загрузка работает нормально, и когда я открываю ее в Azure Storage Explorer, файл открывается нормально. Однако, когда я пытаюсь загрузить его, я получаю поток октетов и не могу понять, как преобразовать его обратно в PDF. Я делаю это все через приложение Function, поэтому я не уверен, поможет ли запись всего во временный файл. Я попробовал это, и я получил поврежденный PDF как мой вывод. Мой код выглядит следующим образом.

Загрузить:

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = 'testblobstore123'

file = req.files['file']
try:
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=file.filename)
    blob_client.upload_blob(file)
except Exception as e:
    print(e)
    return "Unspecified Error"

Загрузить:

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = 'testblobstore123'
file = req.form['file']
blob_client = blob_service_client.get_blob_client(container=container_name, blob=file)
# data = blob_service_client.get_data_to_text(container_name, file)

data = blob_client.download_blob().readall()

1 Ответ

0 голосов
/ 20 февраля 2020

Во-первых, в своем тесте я открываю ссылку на файл или загружаю ее на локальный компьютер, тип контента - поток Octet, однако они могут читать.

Ниже приведен мой код загрузки.

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = 'test'
blob_name='nodejschinese.pdf'
download_file_path = os.path.join('D:', blob_name)
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

with open(download_file_path, "wb") as download_file:
    download_file.write(blob_client.download_blob().readall())

Во-вторых, если вы хотите изменить тип содержимого при загрузке, вы можете добавить ContentSettings в методе upload_blob.

Ниже приведен мой код загрузки с ContentSettings.

from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient,ContentSettings

connect_str='connection string'
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = 'test'
local_file_name='nodejs.pdf'
upload_file_path='E:\\nodejs.pdf'

blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)
with open(upload_file_path, "rb") as data:
    blob_client.upload_blob(data,content_settings=ContentSettings(content_type='application/pdf'))

enter image description here

...