Сохранение изображения из объекта ответа в виде файла в python - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь получить и сохранить в файл JPG.

from shareplum import Site
from shareplum import Office365
from shareplum.site import Version

server_url = "https://xxx.sharepoint.com/"
site_url = "sites/Technicians/"

un = "un"
pw = "pw"

authcookie = Office365(server_url, username=un, password=pw).GetCookies()
site = Site(server_url + site_url, version=Version.v2016, authcookie=authcookie)

folder = site.Folder('Shared Documents/Technical client documentation' \
                     '/Clients/TestAccount/Pictures')
p = folder.get_image('test.jpg')

Соответствующий код из библиотеки. Я добавил get_image. Я использовал эту статью в качестве ссылки.

    def get_file(self, file_name):
        response = self._session.get(self.site_url + f"/_api/web/GetFileByServerRelativeUrl('{self.info['d']['ServerRelativeUrl']}/{file_name}')/$value")
        return response.text


    def get_image(self, file_name):
        response = self._session.get(self.site_url + f"/_api/web/GetFileByServerRelativeUrl('{self.info['d']['ServerRelativeUrl']}/{file_name}')/$value")
        if response.status_code== 200:
            with open('/home/bruce/test_scripts/pictestNew.jpg', 'wb') as f:
#                r.raw.decode_content = True
                shutil.copyfileobj(response.raw, f)
        return "ok"

Прекрасно работает с текстовыми файлами. Кроме того, если я сделаю печать (response.text), вы получите то, что ожидаете увидеть, если попытаетесь открыть двоичный файл изображения в текстовом редакторе.

Делая это, как указано выше, файл был создан, но пустой. Нет ошибок.

Я попытался вернуть текст, а затем записать его прямо в файл.

p = folder.get_image('test.jpg')
p = bytearray(p)

P будет возвращенным response.text тогда:

with open('picOut1.jpg', 'wb') as f:
    f.write(p)

Это дало мне файл изображения правильного размера, но при попытке просмотра я получил

Ошибка при интерпретации файла изображения JPEG (Не файл JPEG: начинается с 0xef 0xbf

Поиск, который привел меня к связанной статье и другой попытке. Я знаю, что данные есть, я просто не не знаю, как его сохранить.

1 Ответ

0 голосов
/ 03 апреля 2020

Для загрузки изображения через python, shareplum и остальные API это работает.

Это было добавлено в folder.py внутри shareplum. Который для меня находится в моей папке venv под библиотеками.

def get_image(self, file_name):
    response = self._session.get(self.site_url + f"/_api/web/GetFileByServerRelativeUrl('{self.info['d']['ServerRelativeUrl']}/{file_name}')/$value")
    #print(response)
    if response.status_code== 200:
        with open('/home/bruce/test_scripts/testFriday1.jpg', 'wb') as f:
            f.write(response.content)
    return "ok"

Файл записывается и просматривается без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...