ruby-on-rails Tus服务器与shrine集成“处理大于1 gb的大上传文件”

yrwegjxp  于 2023-05-30  发布在  Ruby
关注(0)|答案(1)|浏览(345)

我正试图将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

在这里,默认情况下,服务器直接将文件上传到项目根目录中的data/文件夹中。
我想实现的是将video文件上传到Vimeo。
比如:
1.文件转到${API_BASE}/files
1.矿管员拿到文件
1.我将文件传递给Vimeo(使用vimeo_me2

  1. Vimeo上传文件并发送video_url。我现在将video_url插入某个视频表。
    1.上述所有过程都需要可恢复。
    我用的是vimeo_me2 gem。
    任何人都可以提供一个解决方案,集成/配置Tus服务器与神社?
jchrr9hc

jchrr9hc1#

tus-ruby-server和Shrine的作者在这里:)
在我看来你有两个选择使用Vimeo的“拉上传”,或直接上传到Vimeo。

A.拉式上传

Vimeo的pull upload允许你给予Vimeo你的文件的链接,让它为你下载和保存文件。这应该是可恢复的,因为tus-ruby-server支持range requests,而且Vimeo似乎会使用它:
我们甚至处理可能出现的任何连接问题。
vimeo_me2 gem有一个pull upload方法。所以你可以给予它到tus文件的链接,例如,如果你有一个Movie和一个video附件:

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

B.直接上传到Vimeo

Vimeo也实现了tus可恢复上传协议,所以理论上应该可以使用Uppy直接上传到Vimeo。在这种情况下,您可以删除tus-ruby-server
我个人还没有尝试过这种方法。似乎有一个额外的第一步创建视频,但其余的看起来像标准的tus协议。这是一个由Uppy的作者创建的example app,所以我认为你应该能够从那里复制粘贴很多东西。
我不推荐的方法是从tus服务器下载文件,然后使用vimeo_me2 gem上传到Vimeo。首先,下载是不可恢复的,因为shrine-tus使用的down gem还不支持可恢复的下载。其次,虽然vimeo_me2使用tus协议进行上传,但在连接错误的情况下,它似乎没有做任何事情来恢复上传。它还将整个文件加载到内存中。
在任何情况下,选项A和B都将具有更高的性能。

相关问题