React Native(Expo)文件对象与 Javascript(jQuery)文件对象 - Blob/文件大小不同(YouTube 数据 API)

Posted

技术标签:

【中文标题】React Native(Expo)文件对象与 Javascript(jQuery)文件对象 - Blob/文件大小不同(YouTube 数据 API)【英文标题】:React Native(Expo) File object vs Javascript(jQuery) File object - Blob/File size differ (YouTube Data API) 【发布时间】:2021-09-23 06:30:06 【问题描述】:

我正在尝试在 React Native 中创建一个 File 对象,以使用该文件(视频)将其上传到 YouTube Data v3 API。我让我的应用程序在纯 javascript 中正常工作,我正试图让它在 React Native 中工作 - 上传部分工作但我无法在 React Native 中获取视频文件。

这是我使用 jQuery 在纯 JavaScript 中的工作代码:

function getVideoFile() 
        return $('#file').get(0).files[0];      
      

我只是使用 jQuery 获取视频文件(返回 File 对象)并将其发送到 API,然后上传没有问题。

到目前为止,这是我的 React Native:

let file = await fetch('./assets/video.mp4');
let videoFile = await file.blob();
var blob = videoFile.slice(0, videoFile.size, "video/mp4")
var f = new File([blob], "video.mp4", type: "video/mp4");

在 React Native 中上传到 YouTube 没有任何错误,但在 YouTube 上的“我的视频”页面中我得到了

Processing abandoned
The video could not be processed

我在 JavaScript 和 React Native 代码中看到的唯一区别是 File 对象 size 属性值。 JavaScript 中 File 对象的大小 (1570024) 比 React Native 中的大小 (3539) 大得多——它是同一个视频文件。有人可以解释为什么文件大小不同,因为我很难理解,我做错了什么,或者将 React Native 中的视频文件读入File 对象的正确方法是什么?

更新 1

我用纯 javascript 测试了我的 React Native 获取代码,它获得了合适的文件大小,上传的视频被 YouTube 成功处理。在我的 React Native 应用程序中,相同的函数通过获得更小的文件大小而表现不同。

async function getVideoFile()      
    let file = await fetch('video.mp4');
    let videoFile = await file.blob();
    return new File([videoFile], "video.mp4", type: "video/mp4");     

【问题讨论】:

【参考方案1】:

我找到了解决方案!在 React Native 中,我首先需要使用 require 来获取正确的路径。

var path = require("./assets/video.mp4");
let response = await fetch(path);
var blob = await response.blob();      
var file = new File([blob], "video.mp4", type: "video/mp4");

由于某些奇怪的原因,fetch() 在我的 React Native 应用程序中总是返回 200 ok 状态,即使 url/文件不存在。

【讨论】:

太棒了,谢谢!

以上是关于React Native(Expo)文件对象与 Javascript(jQuery)文件对象 - Blob/文件大小不同(YouTube 数据 API)的主要内容,如果未能解决你的问题,请参考以下文章

React-Native/Expo 接收错误'null 不是对象(评估'match.localteam_name')

对象不是 Expo(react-native) 应用程序中的函数

React Native 与 Expo 应用程序不呈现 FlatList

与 Expo 配合使用的 React Native 图像裁剪工具

React-native refs 和 Expo Camera

react-native-vector-icons/MaterialIcons jest-expo 快照测试错误与打字稿