Импорт старых данных с помощью Rails и Paperclip - PullRequest
9 голосов
/ 08 декабря 2009

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

Есть ли правильный способ сделать это? Кажется, что-то, что должно быть довольно легко.

Ответы [ 2 ]

16 голосов
/ 08 декабря 2009

Я знаю, что сделал то же самое, и я считаю, что я просто создал объект File из пути к каждому файлу и присвоил его атрибуту изображения. Скрепка будет работать с этим файлом:

thing.image = File.new("/path/to/file.png")
thing.save
14 голосов
/ 06 мая 2010

Это прекрасно работает для локальных файлов, но не работает также и для удаленных файлов. У меня есть приложение, которое использует скрепку для загрузки изображений. Эти изображения хранятся на Amazon S3. В любом случае, у меня были старые данные, которые мне нужно было импортировать, поэтому я попробовал следующее:

thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save

Если файл небольшой (скажем, менее 10 КБ), openuri возвращает объект stringio, и мой файл будет сохранен на s3 как stringio.txt

Если размер файла превышает 10 КБ, openuri возвращает объект TempFile. Но имя файла на s3 оказывается уникальным, но не относится к исходному имени файла image.jpg

Мне удалось решить проблему, выполнив следующие действия:

remote_photo = open('http://www.someurl.com/path/to/image.jpg')
def remote_photo.original_filename;base_uri.path.split('/').last; end   
thing.image = remote_photo
thing.save
...