Качване на файл на уебсайт програмно?

Използвам 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
не работи = полето 'filename' не се актуализира... не съм сигурен коя конзола на браузъра трябваше да проверя уебсайтът работи САМО в 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 заявки в Pluggable Protocol Handler

Примерът POSTMON.EXE, свързан към статията, е изчезнал от уебсайта на Microsoft, но все още може да бъде намерен тук.

person noseratio    schedule 04.11.2013