如何通过YouTube v3 API为上传视频设置原始文件名?
YouTube API上传视频时
fileDetails字段报错的解决办法 你遇到的400 unexpectedPart错误,核心原因是**fileDetails是YouTube v3 API的只读字段**——它只能由YouTube服务器在解析完上传的视频文件后自动生成,不能通过videos.insert或videos.update接口手动设置。
为什么会报错?
查看YouTube官方的Video资源定义,fileDetails下的所有属性(比如fileName、fileSize、creationTime)都属于只读属性,API不允许客户端通过写入接口修改或设置这些值。你在请求的part参数里加入fileDetails,就会触发"意外字段"的错误。
解决方案
移除所有手动设置
fileDetails的代码
删除代码中创建VideoFileDetails对象、设置相关属性,以及将fileDetails加入parts列表的逻辑。修改后的上传代码示例:List<String> parts = [] def videoData = new Video() // ...省略snippet、status等可写字段的设置代码... // 上传视频 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) // ...省略进度监听器设置代码... def returnedVideo = insertCommand.execute()获取自动生成的
fileDetails信息
如果需要获取视频的文件详情,在上传成功后,通过videos.get或videos.list接口,指定part=fileDetails来获取:// 上传成功后获取fileDetails def videoDetails = youTube.videos().get("snippet,fileDetails", returnedVideo.getId()).execute() def fileDetails = videoDetails.getFileDetails() // 此处可访问fileDetails.getFileName()、fileDetails.getFileSize()等自动生成的属性关于
update接口的补充
你尝试的videos.update接口同样无法修改fileDetails,因为该字段是只读的,所以在update请求的part参数里加入fileDetails也会触发相同错误,同样需要移除该字段。
内容的提问来源于stack exchange,提问作者RMorrisey
相关产品推荐
相关产品推荐

