下面的类基于在https://github.com/transloadit/uppy-vimeo-thing/blob/master/Vimeo.js中找到的代码。
恢复上传不起作用,它总是从头开始重新开始上传。如果我从Tus选项中删除uploadUrl并将Vimeo的值设置为https://master.tus.io/files/ (因此不上传到Vimeo),则恢复上传将按预期工作。此问题仅在向Vimeo发送上传时发生。
查看我的开发人员工具的网络选项卡,我看到upload-offset在向Vimeo发送补丁请求时总是0,即使是在恢复它(后续请求)时也是如此。
const { Plugin } = require('@uppy/core')
const mapLimit = require('promise-map-limit')
const VIMEO_API_ROOT = 'https://api.vimeo.com'
class Vimeo extends Plugin {
constructor (uppy, opts) {
super(uppy, opts)
this.name = 'Vimeo'
this.id = 'Vimeo'
this.type = 'uploader'
this.opts = Object.assign({
limit: 100
}, this.opts)
this.prepareUpload = this.prepareUpload.bind(this)
this.afterUpload = this.afterUpload.bind(this)
}
async prepareUpload (fileIDs) {
const { videoTitle } = this.opts
fileIDs.forEach((fileID) => {
this.uppy.emit('preprocess-progress', fileID, {
mode: 'indeterminate',
message: 'Creating video...'
})
})
await mapLimit(fileIDs, this.opts.limit, async (fileID) => {
const file = this.uppy.getFile(fileID)
const response = await fetch(`${VIMEO_API_ROOT}/me/videos`, {
method: 'post',
headers: {
'authorization': `Bearer ${vimeoAccessToken}`,
'content-type': 'application/json',
'accept': 'application/vnd.vimeo.*+json;version=3.4'
},
body: JSON.stringify({
upload: {
approach: 'tus',
size: file.size
},
name: videoTitle
})
})
const { upload, link, uri } = await response.json()
this.uppy.setFileState(fileID, {
uploadURL: link,
vimeo: {
link,
id: uri.split('/').pop()
},
tus: Object.assign({}, file.tus, {
endpoint: 'https://files.tus.vimeo.com/files/', // HACK this is to appease tus-js-client
// NOTE: This is uploadUrl instead of endpoint, different from what you might expect;
// Vimeo pre-creates the Tus upload.
uploadUrl: upload.upload_link,
headers: {
'Accept': 'application/vnd.vimeo.*+json;version=3.4'
}
}),
})
this.uppy.emit('preprocess-complete', fileID)
})
}
async afterUpload (fileIDs) {
fileIDs.forEach((fileID) => {
const file = this.uppy.getFile(fileID)
const video = file.vimeo
this.uppy.setFileState(fileID, {
uploadURL: video.link
})
})
}
install () {
this.uppy.addPreProcessor(this.prepareUpload)
this.uppy.addPostProcessor(this.afterUpload)
}
uninstall () {
this.uppy.removePreProcessor(this.prepareUpload)
this.uppy.removePostProcessor(this.afterUpload)
}
}
module.exports = Vimeo发布于 2021-03-30 10:53:32
看这个comment,它会解决它的,我必须在我的'new tus.Upload()‘中设置chunkSize变量。默认情况下,chunkSize是无限的,而且Vimeo的“upload -offset”响应似乎只针对已完成的块,因此在上传完成之前没有已完成的块。通过将其设置为5000000 (5mb),我可以成功地暂停和恢复上传。在恢复时,它从最后一个完成的区块重新启动。
https://stackoverflow.com/questions/61247840
复制相似问题