【问题标题】:Resume file uploading using Tus protocol使用 Tus 协议恢复文件上传
【发布时间】:2019-01-14 13:10:04
【问题描述】:

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

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

我认为这是因为当我向 Vimeo 发送 API 请求以获取 upload_link (step 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
      );
    }
  });

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

【问题讨论】:

    标签: vimeo vimeo-api tus


    【解决方案1】:

    我做了什么:

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

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

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

    【讨论】:

    • 我喜欢这个...你在哪里存储“上传链接”信息?缓存还是数据库?
    • @rook99 我将它保存在我的数据库中,在那里我保存上传视频的链接记录,因为上传链接与视频的主链接一起返回(观看它),你不能得到这个主链接从上传链接到视频
    • 我在重复使用upload_link时遵循相同的方法,但是当我刷新浏览器并再次开始tus上传(相同的文件,相同的upload_link)时,它会再次上传完整的文件。 @StanFad 你还做了什么来解决这个问题?
    • 谢谢。这个解决方案非常干净。我已经使用你的设计来完成这项任务,我喜欢它。
    猜你喜欢
    • 2022-08-22
    • 2021-01-07
    • 2019-05-18
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多