Подделать реальность захвата: указанный идентификатор фотосцены не существует - PullRequest
0 голосов
/ 27 апреля 2020

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

{'Usage': '0.48637413978577', 'Resource': '/file', 'Error': {'code': '19', 'msg': "Specified Photoscene ID doesn't exist in the database"}}

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


formData = {'Content-Type': 'multipart/form-data', 'Authorization': 'Bearer eyXXXX'}

sceneId = "l5w----etc-etc------qQ"

# This bit is so I can use tkinter to choose my images
application_window = tk.Tk()
application_window.withdraw()
answer = filedialog.askopenfilenames(parent=application_window,
                                    initialdir=os.getcwd(),
                                    title="Please select one or more files:",
                                    filetypes=[("Image files", ".jpg .jpeg")])
if answer != "":
    files = {
        "photosceneid":(None, sceneId),
        "type":(None, "image")
    }
    n=-1
    for a in answer:
        n = n+1
        a = a.replace("/", "//")
        files["file[{x}]".format(x=n)] = (a, open(a,"rb"))
    # This bit adds keys and values to the dictionary as "file[0]": ("path//to//image//", open("path//to//image//","rb"))

    r = requests.post("https://developer.api.autodesk.com/photo-to-3d/v1/file",headers=formData,files=files).json()
    print(r)

Я следую за фрагментами из официальной ссылки api

curl -v 'https://developer.api.autodesk.com/photo-to-3d/v1/file' \
  -X 'POST' \
  -H 'Authorization: Bearer eyjhbGCIOIjIuzI1NiISimtpZCI6...' \
  -F "photosceneid=hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU" \
  -F "type=image" \
  -F "file[0]=@c:/sample_data/_MG_9026.jpg" \
  -F "file[1]=@c:/sample_data/_MG_9027.jpg"

Спасибо за чтение и за помощь!

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Проблема в том, что вы отправляете данные photosceneid в виде файла. В фрагменте cURL с официального api

curl -v 'https://developer.api.autodesk.com/photo-to-3d/v1/file' \
-X 'POST' \
-H 'Authorization: Bearer eyjhbGCIOIjIuzI1NiISimtpZCI6...' \
-F "photosceneid=hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU" \
...

флаг -F означает форму (в случае cURL), и это не обязательно файл.

Таким образом, вы Вам нужно будет отправить photosceneid и type как данные вместо файла:

from requests_toolbelt import MultipartEncoder
import requests

url = "https://developer.api.autodesk.com/photo-to-3d/v1/file"

payload = MultipartEncoder(
   fields={'photosceneid': MY_PHOTOSCENE,
           'type': 'image',
           'file[0]': ("DSC_5428.JPG", open('./DSC_5428.JPG', 'rb'), 'image/jpg')
        }
  )


headers = {
 'Content-Type': payload.content_type,
 'Authorization': TOKEN
}


req = requests.request("POST",
                      url,
                      headers=headers,
                      data=payload
                     )
1 голос
/ 29 апреля 2020

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

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

И идентификатор сцены, который вы использовали в своем запросе для загрузки файлов, был неверным ... на самом деле это было из нашего примера здесь

Если вы выполнили команду do c здесь , чтобы создать сцену, вы сможете получить идентификатор сцены в ответе, например ниже:

{
  "Photoscene": {
    "photosceneid": "hcYJcrnHUsNSPII9glhVe8lRF6lFXs4NHzGqJ3zdWMU"
  }
}

И Обязательно укажите это в ваших будущих запросах ....

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