React Native(Expo) 文件对象与 Javascript(jQuery) 文件对象 - Blob/File 大小不同(YouTube 数据 API)
React Native(Expo) File object vs Javascript(jQuery) File object - Blob/File size differ (YouTube Data API)
我正在尝试在 React Native 中创建一个 File
对象,以使用该文件(视频)将其上传到 YouTube Data v3 API。我使我的应用程序在普通 Javascript 中正常工作,我正在尝试使其在 React Native 中工作 - 上传部分有效,但我在 React Native 中获取视频文件时遇到问题。
这是我的工作代码 JavaScript 使用 jQuery:
function getVideoFile() {
return $('#file').get(0).files[0];
}
我只是使用 jQuery(returns 一个 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 (1570024
) 中 File
对象的大小远大于 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"});
}
我找到了解决办法!在 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"});
出于某些奇怪的原因,即使 url/file 不存在,我的 React Native 应用程序中 fetch()
始终处于 returns 200 ok
状态。
我正在尝试在 React Native 中创建一个 File
对象,以使用该文件(视频)将其上传到 YouTube Data v3 API。我使我的应用程序在普通 Javascript 中正常工作,我正在尝试使其在 React Native 中工作 - 上传部分有效,但我在 React Native 中获取视频文件时遇到问题。
这是我的工作代码 JavaScript 使用 jQuery:
function getVideoFile() {
return $('#file').get(0).files[0];
}
我只是使用 jQuery(returns 一个 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 (1570024
) 中 File
对象的大小远大于 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"});
}
我找到了解决办法!在 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"});
出于某些奇怪的原因,即使 url/file 不存在,我的 React Native 应用程序中 fetch()
始终处于 returns 200 ok
状态。