我正在尝试使用tus协议在vimeo上上传视频,并且视频上传正常,但是如果我们暂停并恢复,则重新开始上传,我可能做错了什么?这是代码。
$(document).on("click", "button", function (e) {
var file = $(this).prop("files")[0];
$.ajax({
'url': 'https://api.vimeo.com/me/videos',
'type': 'POST',
'headers': {
'Accept': 'application/vnd.vimeo.*+json;version=3.4',
'Content-Type': 'application/json',
'Authorization': 'bearer ' + 'token'
},
"data": JSON.stringify({
"upload": {
"approach": "tus",
"size": file.size
}
}),
'success': function (result) {
var upload = new tus.Upload(file, {
uploadUrl: result.upload.upload_link,
onError: function (error) {
console.log("Failed because: " + error)
},
onProgress: function (bytesUploaded, bytesTotal) {
var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2)
console.log(bytesUploaded, bytesTotal, percentage + "%")
},
onSuccess: function () {
console.log("Download %s from %s", upload.file.name, upload.url)
}
})
// Add listeners for the pause and unpause button
var pauseButton = document.querySelector("#pauseButton")
var unpauseButton = document.querySelector("#unpauseButton")
pauseButton.addEventListener("click", function () {
upload.abort()
})
unpauseButton.addEventListener("click", function () {
upload.start()
})
// Start the upload
upload.start()
},
'error': function (result) {
}
});
答案 0 :(得分:0)
一个迟到的回复,但我自己遇到了这个问题,我想我会与将来偶然发现此页面的其他人分享我如何修复它。
我必须在我的“新 tus.Upload()”中设置 chunkSize 变量。默认情况下,chunkSize 是无限的,而且 Vimeo 的 'upload-offset' 响应似乎仅针对已完成的块,因此在上传完成之前没有已完成的块。
通过将其设置为 5000000 (5mb),我可以成功地暂停和恢复上传。恢复后,它会在最后完成的块处重新启动,因此对于小文件(例如 30mb),恢复后可能会明显下降几个百分比。对于 5mb 占较小百分比的较大文件,这将不太明显,或者您可以将 chunkSize 设置为 1mb,尽管 chunkSize 越小,由于 http 请求数量增加,上传速度越慢。
var upload = new tus.Upload(file, {
chunkSize: 5000000,
uploadUrl: result.upload.upload_link,
onError: function (error) {
console.log("Failed because: " + error)
},
onProgress: function (bytesUploaded, bytesTotal) {
var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2)
console.log(bytesUploaded, bytesTotal, percentage + "%")
},
onSuccess: function () {
console.log("Download %s from %s", upload.file.name, upload.url)
}
})
希望这对某人有所帮助。