Можно ли загружать файлы из полей типа файла с помощью Ruby?

Я ищу способ загружать файлы с разных страниц и хранить их в определенной папке на локальном компьютере. Я использую Руби 1.9.3

См. поле ниже:

Filetypefield

Файл с запросом на загрузку

ИЗМЕНИТЬ

вот содержание html:

<input type="hidden" name="supplier.orgProfiles(1152444).location.locationPurposes().extendedAttributes(Upload_RFI_Form).value.filename" value="Screenshot.docx">

<a style="display:inline; position:relative;" href="

                                      /aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyz">
                                Screenshot.docx
                             </a>

Одна возможность, которую я только что попробовал: с содержимым html, если добавить, скажем, https://xyz.test.com и создать URL-адрес, как показано ниже.

https://xyz.test.com/aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyz

и поместите этот URL-адрес в браузер и нажмите Enter, что даст мне возможность загрузить файл, как указано на скриншоте.

Теперь это можно сделать с помощью Ruby через скрипт?


person Arup Rakshit    schedule 09.01.2013    source источник


Ответы (1)


Поскольку вы не указали действительный URL-адрес, вам сложно тестировать решения.

В общем, получение содержимого URL-адреса одинаково, будь то страница или файл. Встроенный в Ruby OpenURI - это быстрый путь:

require 'open-uri'
file = open('http://example.com').read

Сохранить этот файл легко:

IO.binwrite('/path/to/file_to_save', file)

Использование binwrite позволяет избежать любого преобразования конца строки, которое может произойти при сохранении двоичных данных. Для использования текстовых данных:

IO.write('/path/to/file_to_save', file)

И IO.binwrite, и IO.write задокументированы в модуле ввода-вывода.

person the Tin Man    schedule 09.01.2013
comment
Может ли он обрабатывать диалоговое окно, как я вставил выше? - person Arup Rakshit; 10.01.2013
comment
https://xyz.test.com/aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyzэто ссылка на загружаемый файл. когда вы вставите его в браузер и нажмете диалоговое окно команды enter, появится всплывающее окно. ваш код сохраняет файл таким образом или любым другим? - person Arup Rakshit; 10.01.2013
comment
Вы не можете напрямую взаимодействовать с диалоговым окном браузера, да и обычно это не требуется. Графический интерфейс браузера недоступен для Ruby, если вы не используете WATIR или одну из его производных. - person the Tin Man; 10.01.2013
comment
Хорошо, мне просто нужно скачать файл с веб-страницы, и я вставил ссылку. поэтому ваш код сможет это сделать. Правильно? - person Arup Rakshit; 10.01.2013
comment
ВАШ код, основанный на том, что мы вам покажем, сделает это. В Stack Overflow мы не обязательно даем полный ответ, а только те части, которые вам нужны для начала работы. И до сих пор я не видел кода, который вы написали. - person the Tin Man; 10.01.2013
comment
Ага! я счастлив иметь его. Просто спрашиваю! если возникнут какие-либо проблемы, я вставлю сюда свой полный код! - person Arup Rakshit; 10.01.2013
comment
Ваш URL зависает без ответа. - person the Tin Man; 10.01.2013
comment
Хм, я только что дал фиктивный URL, это логично. поскольку оригинальный - это мой производственный URL-адрес, поэтому я не дал. чтобы открыть это, я также должен поделиться паролем, чего я не должен. :) - person Arup Rakshit; 10.01.2013
comment
Тогда вы НЕ предоставили нам информацию, необходимую для того, чтобы помочь вам. Ваш URL-адрес находится за защищенным веб-сервером, что требует другого способа обработки данных. Я настоятельно рекомендую переписать ваш вопрос, полностью охватив проблемы, указав, что URL-адрес не работает (и зачем давать тот, который не работает, когда мы должны помочь вам загрузить файл?). - person the Tin Man; 10.01.2013
comment
Нет, у меня есть способ добраться до этой страницы с помощью selenium, и я нашел способ загрузить файл, надеюсь, ваша помощь поддержит меня. - person Arup Rakshit; 10.01.2013