2017-08-24 2 views
0

Multi-part gemを使用して複数部分のフォームデータをアップロードしています。 ファイルパス、ファイル名、ファイルタイプなどの配列があります。multipart :: post gem経由で複数のファイルをループでアップロードすることはできますか

私は複数のファイルをアップロードしたいので、私はそれらの配列をループに.eachを使用して、ここで

"file1" => UploadIO.new(File.new('/tmp/1.jpg'), 'image/jpeg', '1.jpg'), 
"file2" => UploadIO.new(File.new('/tmp/2.jpg'), 'image/jpeg', '2.jpg'), 
"file3" => UploadIO.new(File.new('/tmp/3.jpg'), 'image/jpeg', '3.jpg') 

など、いくつかのコマンドを構築しようとするが、私の試みです:

filepath = ['/tmp/1.jpg','/tmp/2.jpg','/tmp/3.jpg'] 
filetype = ['image/jpeg','image/jpeg','image/jpeg'] 
filename = ['1.jpg','2.jpg','3.jpg'] 

require 'net/http/post/multipart' 
    url = URI.parse("https://example.com/api/send") 
    req = Net::HTTP::Put::Multipart.new url.path, 
     filepath.each_with_index do |(key, value),index| 
      fileorder = "file" + (key+1).to_s 
      lastfile = "file"+ (filepath.size).to_s 
      fileorder => UploadIO.new(File.new(value), filetype[value], filename[value]), 
      if index == filepath.size - 1 
       lastfile => UploadIO.new(File.new(value), filetype[value], filename[value]) 
      end 
     end 
    req.basic_auth("username", "password") 
    http = Net::HTTP.new(url.host, url.port) 
    http.use_ssl = (url.scheme == "https") 
    res = http.request(req) 

そして、それは意志エラーメッセージを出す:

構文エラー、予期しないtASSOC、予期しているキーワード_end
fileorder => UploadIO.new(File.new(値)...

構文エラー、予期しない ''、keyword_end 期待... ETYPE [値]、ファイル名[値])、

keyword_end期待

構文エラー、予期しないtASSOC、

lastfile => UploadIO.new(File.new(値)...

答えて

1
それは私にしばらく時間がかかりますので、私は正しい方向にあなたを指します

あなたのコードを動作させるためにすべてを設定してください。

最初に構文エラーがあるので、ファイルを保存するときにコードの構文をチェックするエディタのプラグイン/拡張機能をインストールすることをお勧めします。 (私はあなたのエラーメッセージが構文エラーであることを経験から知っていますが、プラグインは私にどこに起こったかを教えてくれました)。

第二に、あなたはそう、あなたが最初のハッシュを構築し、それを引数として渡す必要がRubyであなたが望むダイナミックな計算を行うことはできません。

は、これらの線に沿って何かを試してみてください:

url = URI.parse("https://example.com/api/send") 

files = {} 
filepath.each_with_index do |(key, value),index| 
    # ... calculate your values 
    files["file#{index}"] = UploadIO.new(File.new("./#{key}.#{value}"), "image/jpeg", "#{key}.#{value}") 
    # {} will become { "file1" => UploadIO.new(File.new("./image.jpg"), "image/jpeg", "image.jpg") } 
end 

# "files" hash will be something like this 
# { 
# "file1" => UploadIO.new(File.new("./image1.jpg"), "image/jpeg", "image1.jpg"), 
# "file2" => UploadIO.new(File.new("./image2.jpg"), "image/jpeg", "image2.jpg"), 
# "file3" => UploadIO.new(File.new("./image3.jpg"), "image/jpeg", "image3.jpg") 
#} 
req = Net::HTTP::Put::Multipart.new(url.path, files) 

req.basic_auth("username", "password") 
http = Net::HTTP.new(url.host, url.port) 
http.use_ssl = (url.scheme == "https") 
res = http.request(req) 
+0

感謝ハッシュを使って作業をしました。どうもありがとうございました。 – lilixiaocc

関連する問題