2010-04-03 21 views
6

Chciałbym stworzyć kontroler Railsów, który pobierze serię plików jpg z Internetu i bezpośrednio zapisze je w bazie danych jako binarną (Nie jestem próbując zrobić formularz do przesyłania)Szyny: Jak pobrać plik z http i zapisać go w bazie danych?

Jakaś wskazówka na ten temat?

Dziękuję

Edit: Oto kod pisałem już przy użyciu attachment-fu gem:

http = Net::HTTP.new('awebsite', 443) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
http.start() { |http| 
    req = Net::HTTP::Get.new("image.jpg") 
    req.basic_auth login, password 
    response = http.request(req) 
    attachment = Attachment.new(:uploaded_data => response.body) 
    attachement.save 
} 

I dostaję "metoda niezdefiniowany` content_type”dla #" błąd

Odpowiedz

6

Użyj open-url (w Ruby stdlib), aby pobrać pliki, a następnie użyj klejnotu, takiego jak paperclip, aby zapisać je w db jako załączniki do modeli.

UPDATE:

attachment_fu nie akceptuje surowe bajty, potrzebuje obiekt "plikopodobny". Użyj this example of a LocalFile wraz z poniższym kodem, aby zrzucić obraz do pliku tymczasowego, a następnie wysłać go do swojego modelu.

http = Net::HTTP.new('www.google.com') 
    http.start() { |http| 
    req = Net::HTTP::Get.new("/intl/en_ALL/images/srpr/logo1w.png") 
    response = http.request(req) 
    tempfile = Tempfile.new('logo1w.png') 
    File.open(tempfile.path,'w') do |f| 
     f.write response.body 
    end 
    attachment = Attachment.new(:uploaded_data => LocalFile.new(tempfile.path)) 
    attachement.save 
    } 
+0

Dziękuję, już próbowałem tego z innym klejnotem, ale się nie udało. Zobacz mój przykładowy kod powyżej – Chris

+0

'content_type' jest niezdefiniowany, ponieważ attachement_fu oczekuje pliku, a nie strumienia bajtów. Zaktualizowałem swoją odpowiedź za pomocą kodu. –

+0

Dziękuję, to działa :) – Chris

Powiązane problemy