Как добавить исходное имя файла в загрузку видео через API YouTube?

Как задать имя файла для загрузки видео на YouTube?

Я загружаю через конечную точку videos.insert в API YouTube v3.

Если я опущу часть fileDetails, все остальное будет работать так, как ожидалось.

Я попытался добавить часть fileDetails, вот так:

        List<String> parts = []
        def videoData = new Video()
        // ...omitted code to set up snippet, etc...

        // set file details:
        def fileDetails = new VideoFileDetails()
        fileDetails.setFileName("filename.mp4")
        fileDetails.setCreationTime(fileAttributes.creationTime().toInstant().toString())
        fileDetails.setFileSize(BigInteger.valueOf(Files.size(videoFileInfo.filePath)))
        videoData.setFileDetails(fileDetails)
        parts.add('fileDetails')

        // upload the video
        def mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT, Files.newInputStream(videoFileInfo.filePath))
        mediaContent.setLength(Files.size(videoFileInfo.filePath))

        def insertCommand = youTube.videos().insert(parts.join(','), videoData, mediaContent)
        // ...omitted code to set up progress listener...
        def returnedVideo = insertCommand.execute()

Я получаю ответ 400:

POST https://www.googleapis.com/upload/youtube/v3/videos?part=status,snippet,fileDetails&uploadType=resumable
{
  "code" : 400,
  "errors" : [ {
    "domain" : "youtube.part",
    "location" : "part",
    "locationType" : "parameter",
    "message" : "'{0}'",
    "reason" : "unexpectedPart"
  } ],
  "message" : "'{0}'"
}

Редактировать

Я также попытался указать fileDetails через запрос PUT с тем же результатом:

//        def fileDetails = new VideoFileDetails()
//        fileDetails.setFileName(fileName)
//        fileDetails.setCreationTime(videoFileInfo.fileAttributes.creationTime().toInstant().toString())
//        fileDetails.setFileSize(BigInteger.valueOf(Files.size(videoFileInfo.filePath)))
//        returnedVideo.setFileDetails(fileDetails)
//        parts.add('fileDetails')
//        youTube.videos().update('fileDetails', returnedVideo).execute()

похоже, что на ваш вопрос дан ответ здесь: stackoverflow.com/questions/47890778/…

daggett 30.04.2024 18:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
1
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

не могу проверить это

согласно Добавить имя файла в загрузку YouTube API - вы не можете установить fileDetails часть

однако для установки имени файла используется та же ссылка, предлагающая установить http-заголовок Slug

Итак, попробуйте этот код:

def insertCommand = youTube.videos().insert(...)
def headers = insertCommand.getRequestHeaders()
headers.set('Slug', "filename.mp4")
insertCommand.setRequestHeaders(headers) //not sure if this required
...
insertCommand.execute()

я нашел ссылку на заголовок Slug только в описании ошибки: https://developers.google.com/youtube/v3/docs/videos/insert#errors

InvalidFilename: имя видеофайла, указанное в заголовке Slug, недопустимо.

Это сделало это! Спасибо за вашу помощь! Не знаю, почему об этом не упоминается в документах. Думаю, в какой-то момент я даже погуглил «заголовок пула», увидев ссылку на него в другом месте, но не смог понять, как установить его с помощью Java-клиента. Я подумал, что это для более старой версии API.

RMorrisey 01.05.2024 15:27

Другие вопросы по теме