使用Tus协议断点续传文件

roo*_*k99 5 vimeo vimeo-api tus

我正在使用Laravel开发一个网站,并且使用tus-js-client将文件直接上传到Vimeo,而无需通过我的服务器。上传工作完美。

但是,假设上传达到 44%,然后用户刷新了浏览器...据我了解,当用户再次开始上传同一文件时,它应该从 44% 继续上传..但这不会发生,它会开始从一开始就。

我认为发生这种情况是因为当我向 Vimeo 发送 API 请求以获取 upload_link 步骤1 )时,每次用户刷新页面时,它都会给我一个新的upload_link 。

 // Upload process start 
  var self = this;

  // Send request to server to get (upload.upload_link) from Vimeo API (Step 1)
  var uploadEndPoint = self.getUploadEndPoint();

  // Start uploading ( Step 2 )
  self.uploader = new tus.Upload(file, {
    uploadUrl: uploadEndPoint,
    retryDelays: [0, 1000, 3000, 5000],
    metadata: {
      filename: file.name,
      filetype: file.type
    },
    resume: true,
    uploadSize: file.size,
    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",
        self.uploader.file.name,
        self.uploader.url
      );
    }
  });
Run Code Online (Sandbox Code Playgroud)

处理此问题的最佳方法是什么,以便用户可以恢复上传?

Sta*_*Fad 3

我做了什么:

  1. 设置 Laravel 后端端点以获取下载链接
  2. 对于第一个端点请求,从后端向 Vimeo 发出请求并在后端保存上传链接
  3. 对于进一步的请求,检查客户端是否要下载相同的文件(按名称和大小,或按哈希),如果是,则返回保存的上传链接,如果不是,则请求新的文件

通过这样做我解决了两个问题:

  • 保留上传链接的记录,直到文件未完全上传
  • 保持我的永久 Vimeo 访问令牌在服务器上不被泄露,仅在客户端上发送上传链接