Как задать имя файла для загрузки видео на 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()
не могу проверить это
согласно Добавить имя файла в загрузку 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.
похоже, что на ваш вопрос дан ответ здесь: stackoverflow.com/questions/47890778/…