2017-09-07 3 views
0

Ich bin neu bei Rails.Wie Dateiobjekt von Google Drive-Download zurückgeben

Ich habe eine Methode, die eine Datei von Google Drive herunterlädt und speichert es auf der lokalen CD. Wenn die Datei heruntergeladen wird, gibt die Konsole nil zurück, aber die Datei befindet sich im Ordner.

Ich muss diese Datei in meinem Controller verwenden, aber wenn die Download-Methode nil zurückgibt, kann ich sie nicht als Objekt weitergeben.

Download-Methode:

def download 
    found = google_files.select { |f| f.id == file_id } 
    file_title = found.first.title 
    file = session.file_by_title(file_title) 
    path = File.join(Backup.base_directory, file_title) 
    file.download_to_file("#{path}") 
end 

Controller:

def create 
    # file_id = params.fetch(:file_id) 
    file_id = "0Byyflt8z3jarbm5DZGNNVXZSWjg" 
    @backup = DiscourseDownloadFromDrive::DriveDownloader.new(file_id).download 
end 

Konsole Ausgang nach der Download-Methode ausführt:

[...] 
Writing chunk (1397 bytes) 
Writing chunk (1397 bytes) 
Writing chunk (1397 bytes) 
Writing chunk (619 bytes) 
Success - nil 

=> nil 
[4] pry(main)> 

Logger:

Rails.logger.debug(">>> @BACKUP >>>: #{@backup.inspect}") 

D, [2017-09-07T20:21:24.835450 #7755] DEBUG -- : >>> @BACKUP >>>: nil 

Irgendein Tipp, wie man damit fortfährt, würde sehr geschätzt!

+0

Was ist in Ihrem 'show' Aktion? Sieht so aus, als käme der Fehler von hier her. –

+0

Die Show-Aktion enthält im Moment nur zwei Rails.logger.debug-Anweisungen. Ich habe die Frage aktualisiert, grundsätzlich '@ backup' logs' nil'. – catch22

+0

Wirf einen 'byebug' nach der Zeile' file_id' in deiner Erstellungsaktion und versuche 'DiscourseDownloadFromDrive :: DriveDownloader.new (file_id) .download' auszuführen, um zu sehen, was du bekommst. Das Ermitteln des Fehlers ist beim Erstellen des Laufwerk-Downloaders –

Antwort

3

Ihre download Methode gibt immer nur nil zurück. Das liegt daran, dass die download_to_file des Edelsteins immer nil zurückgibt.

Sie sollten Ihre download Methode ändern, damit es etwas zurückgibt, das Sie verwenden können, um die Datei zu erhalten. Ich denke, diese Methode sollte den Pfad zur heruntergeladenen Datei zurückgeben.

def download 
    found = google_files.select { |f| f.id == file_id } 
    file_title = found.first.title 
    file = session.file_by_title(file_title) 
    path = File.join(Backup.base_directory, file_title) 
    file.download_to_file("#{path}") 
    path 
end 

Jetzt können Sie es in der Steuerung verwenden:

def create 
    # file_id = params.fetch(:file_id) 
    file_id = "0Byyflt8z3jarbm5DZGNNVXZSWjg" 
    file_path = DiscourseDownloadFromDrive::DriveDownloader.new(file_id).download 
    @backup = File.open(file_path) # do whatever you want with the file, since now you know how to get it 
end 
+0

Dank @chumakoff hast du meinen Tag gemacht! – catch22

Verwandte Themen