gpt4 book ai didi

android - [XmlHttpRequest][react-native] xhr.upload.onprogress 不适用于 xhr.send({uri : 'file:///...' })

转载 作者:太空狗 更新时间:2023-10-29 14:42:17 52 4
gpt4 key购买 nike

我正在尝试使用 youtube v3 API 上传视频,查看 this示例。

所以,我写了这样的东西:

var xhr = new XMLHttpRequest();
xhr.open('PUT', this.url, true);
xhr.setRequestHeader('Content-Type', this.contentType); <=== video/mp4
xhr.setRequestHeader('Content-Range', 'bytes ' + this.offset + '-' + (end - 1) + '/' + this.filesize);
xhr.setRequestHeader('X-Upload-Content-Type', this.filetype); <=== video/mp4

if (xhr.upload) {
xhr.upload.addEventListener('progress', this.onProgress);
}
xhr.onload = this.onContentUploadSuccess_.bind(this);
xhr.onerror = this.onContentUploadError_.bind(this);
xhr.send({uri: this.file.path}); <=== file:///.....

它有效,我有 xhr.onloadxhr.onerror,视频文件已上传到 youtube 并在那里播放。

但是我还没有xhr.upload.onprogress

我尝试了 xhr.onprogressxhr.upload.onprogressxhr.upload.addEventListener - 所有这些都不起作用。

但是!当我使用 FormData

let data = new FormData();
data.append('File', {
uri: source.path,
type: source.type,
name: source.name
});
var xhr = new XMLHttpRequest();
xhr.open('PUT', this.url, true);
//xhr.setRequestHeader('Content-Type', this.contentType);
//=== comment this, because it throw error 'multipart != video/mp4'
//xhr.setRequestHeader('Content-Range', 'bytes ' + this.offset + '-' + (end - 1) + '/' + this.filesize);
//=== comment this, because sending data size != filesize
xhr.setRequestHeader('X-Upload-Content-Type', this.filetype);

if (xhr.upload) {
xhr.upload.addEventListener('progress', this.onProgress);
}
xhr.onload = this.onContentUploadSuccess_.bind(this);
xhr.onerror = this.onContentUploadError_.bind(this);
xhr.send(data); <==== FormData

xhr.upload.onprogress 正在运行。但是youtube api返回处理错误,因为它只支持'video/*'和'application/octet-stream',不支持'multipart/form-data'。

在不使用 FormData 的情况下使用 xhr.upload.onprogress 我做错了什么?

附言对不起我丑陋的英语

  • native react v0.47.2
  • 节点 v8.2.1
  • npm v5.3.0

  • 目标平台:Android

  • 开发操作系统:MacOS
  • 构建工具:Android SDK

最佳答案

这篇文章是不久前的,但试试这个:

const xhr = new XMLHttpRequest();
xhr.open('PUT', uploadUrl);
xhr.onLoad = this.onContentUploadSuccess_.bind(this);
xhr.onerror = this.onContentUploadError_.bind(this);
...formData here
xhr.send(formData);
if (xhr.upload) {
xhr.upload.onprogress = ({ total, loaded }) => console.log(loaded / total);
}

将 xhr.upload.onprogress 放在最后为我做了。检查Firefox docs获取事件详细信息(如加载、总计)。确保按照我上面的方式解构 total 和 loaded。

关于android - [XmlHttpRequest][react-native] xhr.upload.onprogress 不适用于 xhr.send({uri : 'file:///...' }),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993189/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com