Я следил за учебным пособием «Перевод файла Revit, создание информации о помещении и пространстве». Прямо сейчас я застрял на задаче 3, пытаясь перевести исходный файл Revit в SVF2.
Используя предоставленный файл Revit и следующий запрос POST https://developer.api.autodesk.com/modelderivative/v2/regions/eu/designdata/job
:
// Headers
[
'Authorization' => ...,
'Content-Type' => 'application/json',
'x-ads-force' => true,
]
// Body
[
"input" => [
"urn" => "<some urn>",
"compressedUrn" => false
],
"output" => [
"destination" => [
"region" => "EMEA"
],
"formats" => [
[
"type" => "svf2",
"views" => [
"2d",
"3d"
],
"advanced" => [
"generateMasterViews" => true
]
]
]
]
]
Я всегда получаю следующие сообщения:
Revit-UnsupportedFileType Файл не является файлом Revit или не является поддерживаемой версией. TranslationWorker-RecoverableInternalFailure Возможно восстанавливаемый код выхода предупреждения из экстрактора: -536870935
Я надеюсь, что кто-то может сказать, что не так с запросом POST. Я нашел похожий вопрос, но ответ, похоже, не относится к этой проблеме.
На самом деле я сам попробовал этот же учебник, и он отлично работает с моей стороны. Пока вы выполняете каждый шаг, вы должны получить желаемый результат.
Если вы столкнулись с ошибкой в третьей задаче, это означает, что вы могли что-то сделать неправильно в задаче 2.
Есть несколько шагов, которые вы должны проверить в Задаче 2, от которых зависит Задача 3. Пожалуйста, проверьте следующее:
Эти действия должны гарантировать, что ваш файл полностью загружен и готов к переводу в SVF2.
ПРИМЕЧАНИЕ. При выполнении всех этих процессов убедитесь, что ваш токен доступа действителен, поскольку он остается действительным только в течение одного часа. Если срок действия токена истек, вы должны получить новый токен, повторно отправив запрос на аутентификацию в Forge.
Задавая вопрос, я использовал следующий код для загрузки файла в Autodesk с помощью http-клиента Laravel:
$response = Http::attach( 'file', $file->getContent(), $file->getClientOriginalName() )
->put( $signed_url );
Это загрузило файлы, и все работало для заархивированных моделей. Но, как объясняется в вопросе, простые исходные файлы, такие как .ipt
или .rvt
, не переводились.
Я предполагаю, что Laravel добавляет к этому запросу что-то, что каким-то образом повреждает файлы для Autodesk. Используя следующий запрос:
$response = Http::withHeaders( [
'Content-Disposition' => 'attachment; filename='.$file->getClientOriginalName(),
'Content-Length' => $file->getSize(),
] )
->send(
'PUT',
$signed_url,
[
'body' => $file->getContent(),
]
);
это работает. Я думаю, используя send
, отправляет «сырой»/бинарный запрос.
В Symfony это будет выглядеть примерно так:
$response = HttpClient::create()->request(
'PUT',
$signed_url,
[
'body' => $file->getContent(),
'headers' => [
'Content-Disposition' => 'attachment; filename='.$file->getClientOriginalName(),
'Content-Length' => $file->getSize()
]
]
);
Я не знаком с Лаварелем, поэтому не могу предложить большую помощь в этой части.
Однако вы можете попробовать использовать другой фреймворк, такой как Nodejs или даже .NET, чтобы посмотреть, сможете ли вы достичь желаемых результатов.
Вы можете следовать этому руководству, которое поможет вам приступить к созданию приложения на платформе Autodesk с использованием Nodejs или .NET framework: https://forge-tutorials.autodesk.io/
Вы сможете использовать Model Derivative API, а затем сможете попытаться преобразовать модель, как предполагалось.