2017-04-06 9 views
2

Googleドライブにファイルをアップロードするツールを開発しています。私は 'google-drive' gemを使用しています。私の見解ではsession.upload_from_fileにパラメータを渡すと、なぜ「ActionController :: ParametersのStringへの暗黙的な変換」も発生しません。

私はのparamsを渡すフォームのコントローラのメソッド呼び出し

<%= file_field :file, class: 'form-control' %> <br> 

としてそれを取った[:ファイル]の

session = GoogleDrive::Session.from_config("config.json") 
session.upload_from_file(params[:file], "right-on.txt", convert: false) 

しかし、私は取得提出 - なしActionController :: Parametersを暗黙的にStringに変換します。

Googleドライブにアップロードするファイルを正常に渡すにはどうすればよいですか。 params [:file]の代わりにローカルファイルパスを渡すと、ファイルは正常にアップロードされます。私はファイルの選択とそれを行う必要があります。あなたはfile_fieldメソッドのドキュメントを開くと

<input type="file" name="file[{:class=>&quot;form-control&quot;}]" id="file_{:class=>&quot;form-control&quot;}"> 

、あなたはそれが最初のオブジェクトを受け入れることに気づくでしょう:あなたはWebコンソールでファイルのアップロード入力タグを検査した場合

答えて

0

フォームタグでmultipartが 'true'に設定されているかどうかを確認します。

そうでない場合は、trueに設定します。

、代わりparams[:file]を渡す、アップロード機能は、パスとして文字列を期待しているparams[:file].path.to_s

渡します。 params[:file]は、実際にアップロード中に一時フォルダに保存されるファイルそのものです。 to_sを使用せずに1回点検してください。

これが役立ちます。

+0

ありがとうございました。それは本当に魔法のように働いた! –

+0

ようこそ。 – mehtasuraj09

2

、次のように表示されます名前、メソッド、最後のオプション(例:class: 'form-control')。

私はあなたのビュー内でこのような何かをしたいと思います:

<%= file_field :drive, :file, class: 'form-control' %> 

これは、このようにHTMLタグを生成します。

<input class="form-control" type="file" name="drive[file]" id="drive_file"> 

その後、あなたのようなあなたのコントローラにファイルをアップロードすることができますあなたはすでにしています。

+0

私はそれを試しました。それはうまくいかなかった。それは、 session.upload_from_file(params [:file]、 "right-on.txt"、convert:false)だと思います。 は最初のパラメータが文字列であることを前提としています。その後、そのパスをこのメソッドに渡してGoogleドライブにアップロードします。アップロードしたファイルのパスを渡すにはどうしたらいいですか? –

関連する問題