代码之家  ›  专栏  ›  技术社区  ›  rook99

使用Tus协议恢复文件上载

  •  2
  • rook99  · 技术社区  · 6 年前

    我正在开发一个使用 拉瓦维尔 ,我正在使用 tus-js-client 将文件直接上载到 维梅奥 不经过我的服务器。上传工作完美。

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

    我认为这是因为当我向Vimeo发送API请求以获取 上传链接 ( step 1 )它会给我一个新的 上传链接 每次用户刷新页面时。。

     // 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
          );
        }
      });
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Stan Fad    6 年前

    我所做的:

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

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

    • 保存上传链接的记录,直到文件未完全上传
    • 保持我的永久Vimeo访问令牌在服务器上不妥协,只在客户端发送上传链接
    推荐文章