2017-09-07 4 views
0

Je suis nouveau sur Rails.Comment retourner l'objet fichier de google drive Télécharger

J'ai une méthode qui télécharge un fichier à partir de google drive et l'enregistre sur le disque local. Lorsque le fichier est téléchargé, la console renvoie nil, mais le fichier se trouve dans le dossier.

Je dois utiliser ce fichier dans mon contrôleur, mais si la méthode de téléchargement renvoie nil, je ne peux pas le passer en tant qu'objet.

méthode de téléchargement:

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 
sortie de la console

après l'exécution de la méthode de téléchargement:

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

=> nil 
[4] pry(main)> 

Enregistreur:

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

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

Tout indice sur la façon de procéder serait très apprécié!

+0

Ce qui est dans votre action 'show'? On dirait que c'est de là que vient l'erreur. –

+0

L'action show ne comprend pour l'instant que deux instructions Rails.logger.debug. J'ai mis à jour la question, fondamentalement '@ backup' logs 'nil'. – catch22

+0

Lancez un 'byebug' après la ligne' file_id' dans votre action create et essayez d'exécuter 'DiscourseDownloadFromDrive :: DriveDownloader.new (file_id) .download' pour voir ce que vous obtenez. Deviner l'erreur est lors de la création du lecteur downloader –

Répondre

3

La méthode download renvoie toujours rien d'autre que nil. C'est parce que download_to_file de la gemme renvoie toujours nil.

Vous devez changer votre méthode download pour qu'elle retourne quelque chose, que vous pouvez utiliser pour obtenir le fichier. Je pense que cette méthode devrait retourner le chemin vers le fichier téléchargé.

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 

Maintenant, vous pouvez l'utiliser dans le contrôleur:

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

Merci @chumakoff vous avez fait ma journée! – catch22