API Dropbox работает, сейчас пытаюсь скопировать изображения в Amazon S3 с помощью carrierwave - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть приложение для ipad, которое использует Dropbox для синхронизации изображений в облаке, чтобы я мог получить к ним доступ через веб-приложение, обрабатывать их и т. Д. И т. Д.

часть, с которой у меня возникли проблемы, это получение файла из Dropbox на s3 через carrierwave. У меня есть фотомодель, и я могу создать новую фотографию и загрузить и изображение успешно. Я также могу положить файл в Dropbox. Однако, когда я пытаюсь получить файл из Dropbox и положить его на s3, содержимое файла просто текст.

Есть ли какие-то типы пантомимы, которые мне нужно установить, или что-то в этом роде?

Я использую dropbox_sdk и метод get_file_and_metadata. Он успешно возвращает мне файловый объект, но содержимое всего лишь текст. это я жестко кодирую файл изображения, так что я могу быть уверен, что он существует ..

dbsession = DropboxSession.deserialize(session[:dropbox_session])
@client = DropboxClient.new(dbsession, ACCESS_TYPE) #raise an exception if session not authorized
@info = @client.account_info # look up account information
@photo = Photo.new(params[:photo])
@db_image metadata = @client.get_file_and_metadata('/IMG_1575.jpg')

часть, которую я не знаю, как сделать, это сказать, взять это изображение @db_image и использовать этот файл при создании нового photo и сохранить его на S3.

Я думаю, что это может быть проблема типа MIME, но я читал, что это основано только на файле ext.

любое понимание, которое вы, ребята, могли бы поделиться, действительно помогло бы мне преодолеть это препятствие. спасибо!

1 Ответ

1 голос
/ 25 ноября 2012

понял это.Вместо этого я использовал метод direct_url.url, который является частью драгоценного камня dropbox-api, используемого с драгоценным камнем carrierwave.метод direct_url.url возвращает безопасный полный URL-путь к этому файлу, который можно использовать в качестве значения remote_url для carrierwave.

@client = Dropbox::API::Client.new(:token  => 'derp', :secret => 'derp')
@dropbox_files = @client.ls "images/#{@event.keyword}/#{photo_size}/"

@dropbox_files.each do |f|
  photo_exists = Photo.where(:dropbox_path => f.direct_url.url).count
  if photo_exists == 0
    @photo = Photo.create(:remote_filename_url => f.direct_url.url, 
                          :dropbox_path => f.direct_url.url,
                          :event_id => @event.id)
  end
end

Теперь я довольно новичок в ruby, поэтому я опубликую лучший способ пошагового просмотра результатов, так как это кажется довольно медленным и неуклюжим.

...