You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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,就会触发"意外字段"的错误。

解决方案

  1. 移除所有手动设置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()
    
  2. 获取自动生成的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()等自动生成的属性
    
  3. 关于update接口的补充
    你尝试的videos.update接口同样无法修改fileDetails,因为该字段是只读的,所以在update请求的part参数里加入fileDetails也会触发相同错误,同样需要移除该字段。

内容的提问来源于stack exchange,提问作者RMorrisey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:57:15