Как загрузить большие файлы в приложение rails? - PullRequest
4 голосов
/ 16 февраля 2010

У меня есть приложение ruby, которое используется пользователями через веб-приложение rails.

Вариант использования, который мне нужно решить: каждый пользователь должен скомпилировать создание сущности в базе данных через веб-страницу и поместить действительно большое вложение (может быть 100 гигабайтов или более), связанное с сущностью.

Теперь это слишком большой размер, чтобы его можно было обрабатывать обычными плагинами загрузки. Я ищу способ решения этой проблемы. Мои идеи: - делегировать загрузку через http на backgroundrb - разработать графический интерфейс GTK и отправить его пользователю для загрузки

Любой другой намек или идеи?

спасибо

Ответы [ 4 ]

1 голос
/ 19 декабря 2011

У этих парней есть хорошая информация о загрузке больших файлов. Может быть, это поможет: http://tinyw.in/67ZF

Они вроде проходят через процесс решения своей проблемы и шагов, которые они предприняли по пути. Стоит заглянуть.

1 голос
/ 17 февраля 2010

Передача 100 ГБ через веб-интерфейс заставляет меня съеживаться. Было бы гораздо лучше написать / использовать отдельное приложение для передачи.

Если вы уже используете Ruby, вы можете написать приложение на основе Ruby, которое загружается по FTP. Например:

require 'net/ftp'

Net::FTP.open('uploads.yoursite.com','username','password') {|ftp|
    ftp.login('username','password')
    ftp.put 'filename'
    if (ftp.last_response != "266 Transfer complete.\n")
        puts "Error with FTP upload\nResponse was: #{ftp.last_response}"
    end
}

Я использую этот код для загрузки автоматически сгенерированных файлов данных на другой сервер, который их архивирует. Существует несколько различных библиотек для создания простых пользовательских интерфейсов в Ruby, и все, что вам нужно, это простое окно, где пользователь может ввести свое имя пользователя и пароль, выбрать файл для загрузки и нажать кнопку «Перейти».

Библиотеки Ruby SSH позволяют осуществлять безопасную передачу файлов по SFTP (подсказка: require 'net/sftp'). Я не использовал его сам, но документы делают его таким же простым, как FTP. IIRC, SFTP имеет встроенную поддержку для возобновления прерванных передач.

Вы также можете использовать утилиту, такую ​​как WinSCP , которая является инструментом с открытым исходным кодом, который может загружать файлы с использованием FTP, SFTP или SCP. Для систем, отличных от Windows, есть Cyberduck для OS X и Kasablanka или gFTP для Linux.

1 голос
/ 16 февраля 2010

Если это> 100 ГБ, вы, вероятно, должны использовать какой-то менеджер закачек.Если скорость вашей сети достаточно высока, вы можете просто создать доверенный апплет для связи с сервером.У доверенного апплета будет полное разрешение на доступ к файлу, поэтому он будет работать как автономное приложение.Таким образом, вы можете избежать необходимости распространять отдельную утилиту для передачи файлов.

В качестве альтернативы вы можете сгенерировать некоторый токен в Интернете, а затем позволить пользователям использовать автономное приложение с данным токеном для загрузки своего файла..

0 голосов
/ 16 февраля 2010

Загрузка файла объемом 100 ГБ через ваше веб-приложение не будет очень хорошей. Эта загрузка займет ваш веб-сервер в течение времени, необходимого для загрузки файла, делая его недоступным для других.

Я бы подумал об использовании FTP или, возможно, даже о том, чтобы ваши пользователи загружали непосредственно на S3 вместо этого, а затем управляли файлами оттуда, поскольку я предполагаю, что вы должны хранить эти файлы где-нибудь в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...