Как я могу загрузить файл, используя его сгенерированное имя файла с ruby ​​​​и механизировать?

Я пытаюсь загрузить файлы с веб-сайта, который использует CDN для распространения. Все URL-адреса на странице загрузки заканчиваются на file.pdf, но нажатие на ссылку в браузере приводит к загрузке файла с описательным именем файла (например, «invoice1234.pdf»). Очевидно, что анализ URL-адреса для получения имени файла приводит к тому, что каждый файл называется file.pdf - я хотел бы использовать то же имя файла, которое используется при загрузке через браузер. Мой код выглядит примерно так:

  filename = File.basename(download.href)
  agent.pluggable_parser.default = Mechanize::Download
  agent.get(mov_download_link.href).save("#{path}/#{filename}")
  agent.pluggable_parser.default = Mechanize::File

Любые идеи были бы хорошы!


person JP.    schedule 11.12.2012    source источник


Ответы (1)


Это имя файла, вероятно, находится в заголовке, который выглядит так:

{'content-disposition' => 'filename="invoice1234.pdf"'}

If so:

f = agent.get(mov_download_link.href)
filename = f.header['content-disposition'][/"(.*)"/, 1]
f.save("#{path}/#{filename}")
person pguardiario    schedule 11.12.2012
comment
Или это может выглядеть как "content-disposition"=>"attachment; filename=invoice1234.pdf"... в этом случае быстрый f.header['content-disposition'].split('=')[1] тоже подойдет. - person poweratom; 16.01.2017