gpt4 book ai didi

cordova - YouTube 上传 API 和 cordova/phonegap

转载 作者:行者123 更新时间:2023-12-02 10:01:31 24 4
gpt4 key购买 nike

我正在编写一个 cordova 应用程序,让用户录制视频并通过 API 将其上传到 YouTube。

如果我使用文件输入并通过访问文件

$('#file').get(0).files[0]

我收到一个 file 对象,可以毫无问题地上传。

如果我录制视频,我会收到一个媒体列表对象。然后我可以调用 window.resolveLocalFileSystemURL( video[0].localURL , success, failed);

在成功回调中,我收到一个文件列表对象。这也不会被接受。

在这个filelist对象上,我可以调用data.file(success,fail),它最终返回一个文件对象。但是当尝试上传到 YouTube 时,我收到了 308 错误。

我怀疑这与访问本地文件路径的权限有关。如果有人有这方面的经验,我很想听听解决方法。

这是上传代码:

UploadVideo.prototype.ready = function(accessToken, video) {
this.accessToken = accessToken;
this.gapi = gapi;
this.authenticated = true;
$this = this;

function result(data){
function success(data){

data.name = "VID_20150329_160037.mp4";
console.log(data)
$this.uploadFile( data );
}
data.file(success)

}
function fail(data){
console.log(data)
}
window.resolveLocalFileSystemURL( video[0].localURL , result, fail);


//this.uploadFile( $('#file').get(0).files[0] );

// $('#button').on("click", this.handleUploadClicked.bind(this));

最佳答案

使用这篇博文,我成功地使元数据和文件上传正常工作: http://lithostech.com/2013/10/upload-google-youtube-api-v3-cors/

通过在发送之前注销 FileTransfer header 信息,我可以看到格式不同:

Content-Disposition: form-data; name="part"
{"snippet":{"title":"Video title","description":"Video description","tags":"Video tags","categoryId":22},"status":{"privacyStatus":"unlisted"}}

应该是:

Content-Disposition: form-data; name=""; filename="file.json"
Content-Type: application/json
{"snippet":{"title":"Video title","description":"Video description","tags":"Video tags","categoryId":22},"status":{"privacyStatus":"unlisted"}}

这是包含工作元数据的更新版本:

function uploadVideo(fileURL) {
var options = new FileUploadOptions();
options.fileKey = 'file';
options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
options.mimeType = 'video/mpg';
options.chunkedMode = false;
options.headers = {
Authorization: 'Bearer ' + accessToken
};
options.params = {
"": {
snippet: {
title: 'Video title',
description: 'Video description',
tags: 'Video tags',
categoryId: 22
},
status: {
privacyStatus: 'unlisted'
}
}
};
var ft = new FileTransfer();
ft.upload(fileURL, 'https://www.googleapis.com/upload/youtube/v3/videos?part=snippet,status', function (data) {
console.log('upload success', data);
}, function (e) {
console.log('upload error', e);
}, options, true);
ft.onprogress = function (progressEvent) {
console.log('onprogress: ' + ((progressEvent.loaded / progressEvent.total) * 100) + '%');
};
}

请注意,我也稍微修改了我的 FileTransfer 插件:

文件传输.java第 374 - 376 行

beforeData.append("Content-Disposition: form-data; name=\"").append(key.toString()).append("\";");
beforeData.append(" filename=\"").append("file.json").append('"').append(LINE_END);
beforeData.append("Content-Type: ").append("application/json").append(LINE_END).append(LINE_END);

修改 cordova/phonegap/ionic 中的插件后,您需要重新加载它。我通过删除平台并再次添加来做到这一点:

cordova platform remove android; cordova platform add android;

关于cordova - YouTube 上传 API 和 cordova/phonegap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330360/

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