Загрузить файл на сайт программно?

Я использую Lazarus. У меня есть приложение с компонентом веб-браузера, которое регистрируется на веб-сайте, загружает страницу, как показано ниже (см. HTML-код ниже), и заполняет различные входные данные. Последний ввод — это файл для загрузки. Я хочу, чтобы мое приложение нажимало «Обзор», выбирало нужный файл и открывало его. После этого я мог опубликовать форму ИЛИ просто загрузить файл и продолжить.

1

У меня есть следующий html-код на сайте:

<td align="left" class="RequiredInput">File:</td>
<td class="datafield">
 <form name="frmMain" id="frmMain" action="upload.asp?step=2&output=1" method="post" enctype="multipart/form-data">
    <input type="file" name="filename" id="filename">
</form>

Я попытался выполнить JS из своего приложения: document.getElementById('filename').value = 'C:\x.csv'

введите здесь описание изображения

2

Я попытался использовать следующий код HttpPostFile из synapse:

uFileName := 'C:\x.csv';
uStream := TFileStream.Create(uFileName, fmOpenRead);
uList:=TStringList.Create;  
if HttpPostFile('upload.asp?step=2&output=1', 'filename', uFileName, uStream, uList) then
 ShowMessage('OK');   

Он вообще ничего не делал (я следил за активностью приложения с помощью Fiddler).

Любая помощь будет оценена по достоинству.

Заранее спасибо,

Жолт


person modzsi    schedule 03.11.2013    source источник
comment
not working не очень хороший криминалистический термин. Что происходит в консоли браузера при просмотре ошибок, проверке запроса на вкладке сети и т. д.   -  person charlietfl    schedule 04.11.2013
comment
не работает = поле «имя файла» не обновлялось ... не уверен, какую консоль браузера я должен проверить, веб-сайт работает ТОЛЬКО в IE. Я использую компонент TWebBrowser.   -  person modzsi    schedule 04.11.2013
comment
т.е. имеет консоль инструментов разработчика - F12 на клавиатуре   -  person charlietfl    schedule 04.11.2013
comment
Спасибо за это, но не знаю, как это может мне помочь. Также я не смог найти вкладку «Сеть». Я пытаюсь автоматизировать форму из приложения, написанного на Lazarus, я использую Fiddler, чтобы посмотреть, что происходит.   -  person modzsi    schedule 04.11.2013
comment
Это два совершенно разных вопроса (один о HTML/JavaScript и совершенно отдельный о Lazarus/Synapse). Их нужно публиковать отдельно, с соответствующими тегами для каждого вопроса. Этот сайт разработан вокруг одного вопроса и одного ответа, а не для того, чтобы смешивать кучу не связанных друг с другом вопросов и просить ответить на них все. :) Пожалуйста, отредактируйте, чтобы удалить один вопрос и связанные с ним теги, и задайте этот удаленный вопрос в новом сообщении. Спасибо.   -  person Ken White    schedule 04.11.2013
comment
Вы спрашиваете, как предварительно заполнить поле ввода файла в HTML-форме. Это не разрешено. Это было бы угрозой безопасности — веб-страница может предварительно заполнить поле, скажем, secret-passwords.db, а затем обманным путем заставить пользователя отправить форму, таким образом собирая файлы, которые пользователи не знают. Я действительно хочу поделиться. Вам нужно подумать о каком-то другом способе решения вашей проблемы.   -  person Rob Kennedy    schedule 04.11.2013
comment
Это один вопрос с довольно соответствующими тегами. Может javascript и не нужен жесткий... Вопрос в заголовке, а остальное только детали... Хотелось бы добиться того, что там есть. Я бы разделил их, если бы они не были связаны. Но они не...   -  person modzsi    schedule 04.11.2013
comment
Роб: Спасибо за ответ. Я хотел бы автоматизировать загрузку файла на веб-сайт, на котором я вошел в систему. Вход в мое приложение переходит на страницу, где находится этот входной файл (среди других входных данных). Я просто думаю, что должна быть возможность обойти просмотр файла и просто загрузить файл. Я не уверен, как, когда я пытаюсь, он просто переходит на страницу выхода из системы.   -  person modzsi    schedule 04.11.2013
comment
Я бы сказал, что в этом случае http не является правильным протоколом. Как сказал Роб, возня с полями ввода и действиями в html звучит как проблема безопасности. Как следует из названия, FTP (протокол передачи файлов) был бы гораздо лучшим выбором.   -  person Andreas    schedule 04.11.2013


Ответы (1)


Это известная проблема, и существует решение, но вам придется преобразовать его из С# в Дельфы.

Другим возможным решением является загрузка файла с использованием URL. API моникеров. Затем загрузка произойдет в том же сеансе, который уже используется элементом управления WebBrowser. Есть статья MSKB:

Как обрабатывать запросы POST в обработчике подключаемого протокола

Образец POSTMON.EXE, связанный со статьей, исчез с веб-сайта Microsoft, но его все еще можно найти здесь.

person noseratio    schedule 04.11.2013