Как открыть фотографию с помощью python для использования в запросе на публикацию API

#python #python-3.x #error-handling

Вопрос:

Я пытаюсь открыть тестовую фотографию в python, чтобы загрузить фотографию с помощью API imgur. Я нашел в Интернете руководства о том, как это сделать с помощью javascript, но я пытаюсь изучить python, поэтому буду признателен за помощь на этом языке.

Ошибка, которую я получаю, заключается в том, что

 FileNotFoundError: [Errno 2] No such file or directory: '..\media\test.jpg'
 

Я подозреваю, что причина ошибки связана с моим подключением к test.jpg файлу, но я, похоже, не могу найти правильный способ добраться до этого файла. Я загрузил свой пример кода ниже, и он также находится в сообщении на github, связанном ЗДЕСЬ.

Различные попытки, которые я предпринял, чтобы вызвать этот файл, включают следующее:

  • 'image': b64encode(open(r'..mediatest.jpg', 'rb').read())
  • 'image': open(r'..mediatest.jpg', 'rb').read()
  • 'image': open('..mediatest.jpg', 'rb').read()
  • 'image': open('..\media\test.jpg', 'rb').read()
  • 'image': open(r'..\media\test.jpg', 'rb').read()
  • 'image': open('../media/test.jpg', 'rb').read()

Я также попытался поместить test.jpg фотографию в ту же папку, что и скрипт python, но, к сожалению, это тоже не сработало.

Код, который я использую:

 from base64 import b64encode
import json
import requests
import config



client_id = config.IMGUR_CLIENT_ID
# headers = ['Authorization'] = f'Client-ID {client_id}'
headers = {"Authorization": f'Client-ID {client_id}'}
api_key = config.IMGUR_CLIENT_SECRET
url = "https://api.imgur.com/3/upload.json"


# print(r'..mediatest.jpg')

j1 = requests.post(
    url, 
    headers = headers,
    data = {
        'key': api_key, 
        #'image': b64encode(open(r'..mediatest.jpg', 'rb').read()),
        'image': open(r'..mediatest.jpg', 'rb').read(),
        'type': 'base64',
        'name': 'test.jpg',
        'title': 'Picture no. 1'
    }
)


 

Изображение структуры файла:

Структура файла

Комментарии:

1. сначала попробуйте использовать /full/path/to/image.jpg вместо использования ../ . Затем вы должны проверить Current Working Folder os.gecwd() — потому что код может запускаться в другой папке, чем вы ожидаете, а затем ../ может привести к другой папке, чем вы ожидаете. Поэтому он может попытаться загрузить из папки, в которой нет изображений. И, наконец, вы можете попытаться BASE = os.path.dirname(os.path.abspath(__file__)) получить папку со скриптом, а затем использовать os.path.join(BASE, r'..mediatest.jpg') ее для создания полного пути к изображению. Эту проблему и решение вы должны найти в сотнях вопросов по Stackoverflow.

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

3. мой метод не работает, потому что (как показано в вашем ответе ниже) у вас проблема в совершенно другом месте. У вас просто не было образа на диске.

Ответ №1:

Не смог понять этого, поэтому я использовал приведенный ниже код для сохранения в папке на моем диске C. Мне не нужно хранить переменную где-либо, так как файл может быть перезаписан каждый раз, когда выполняется код.

 file_location = urllib.request.urlretrieve(url, r'C:temptest.jpg')
 

Комментарии:

1. Я этого не понимаю — в вопросе вы пытались загрузить изображение, но здесь вы загружаете изображение. Так что ваш вопрос был совершенно неправильным. Вы не смогли загрузить файл, потому что у вас его не было.