Tus服务器与神社“处理大型上传文件大小> 1 GB”

时间:2018-11-23 11:14:29

标签: javascript ruby-on-rails shrine tus

我正在尝试将tus-servershrine集成在一起,以将视频文件上传到Vimeo。

Client.js

this.uppy = new Uppy({
  id: 'uppy1',
  autoProceed: false,
  debug: true,
  restrictions: {
    allowedFileTypes: ['.mp4'],
  },
  allowMultipleUploads: true,
})
  .use(Tus, { endpoint: `${API_BASE}/files` })
 /* .use(XHRUpload, { endpoint: `${API_BASE}/files`,
    formData: true,
    bundle: false,
    fieldName: 'file',
    headers: getHeaders(), */
 })
  .use(GoogleDrive, { serverUrl: 'https://companion.uppy.io' })
  .use(Dropbox, { serverUrl: 'https://companion.uppy.io/' });

# config/routes.rb (Rails)
Rails.application.routes.draw do
  mount Tus::Server => "/files"
end

默认情况下,这里是tus服务器,它将文件直接上传到项目目录为data/的文件夹中。

我想要实现的是将video文件上传到vimeo

赞:

  1. 文件转到${API_BASE}/files
  2. 矿山管制员获取文件
  3. 我将文件传递给vimeo(使用vimeo_me2
  4. Vimeo上传文件,发回video_url,现在我将video_url插入特定的视频表中。
  5. 以上所有过程都需要恢复。

我正在使用vimeo_me2宝石。

任何人都可以提供将tus服务器与shrine集成/配置的解决方案。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

tus-ruby-server和Shrine的作者在这里:)

就我而言,您有两种选择:使用Vimeo的“拉式上传”,或直接上传到Vimeo。

A。拉上传

Vimeo的pull upload允许您给Vimeo指向文件的链接,并让它为您下载并保存文件。这应该是可恢复的,因为tus-ruby-server支持range requests,而且Vimeo似乎会使用它:

  

我们甚至可以处理可能出现的任何连接问题。

vimeo_me2宝石具有method的请求上传。因此,您只需为其提供指向tus文件的链接,例如,如果您有一个带有Movie附件的video

vimeo_client.pull_upload("Name of video", movie.video.url)

B。直接上传到Vimeo

Vimeo还implements是可恢复的tus上载协议,因此从理论上讲应该可以使用Uppy直接上载到Vimeo。在这种情况下,您可以摆脱tus-ruby-server

我还没有亲自尝试过这种方法。似乎还需要创建视频的第一步,但其余部分看起来像是标准tus协议。这是Uppy的作者创建的example app,所以我认为您应该可以从那里复制粘贴很多东西。


不建议使用的方法是从tus服务器下载文件,然后使用vimeo_me2 gem将其上传到Vimeo。首先,下载将无法恢复,因为down使用的shrine-tus gem尚不支持恢复下载。其次,在vimeo_me2 uses the tus protocol上载时,如果出现连接错误,它似乎并没有采取任何措施来恢复上载。它还似乎将整个文件加载到内存中。

在任何情况下,选项A和B的性能都会更高。