Как сделать upload файла в VB.NET

Данный материал затрагивает не только Visual Basic, но и всю платформу .NET т.к. используются стандартные классы/компоненты dotNet. А именно WebClient

Visual Basic взят для примера так как разрабатывая программу на бейсике я столкнулся с этой проблемой

Итак задача: сделать закачку файла с диска на сервер методом POST и при этом передать несколько параметров. Если посмотреть описание класса WebClient, то можно увидеть что у него, помимо остальных, имеются два подходящих под эту задачу метода: UploadFile и UploadValues. Но вся проблема в том что UploadFile очень замечательно закачивает файл, но при этом не позволяет передавать параметры, а UploadValues передает параметры, но не файлы.

Одним вариантом из вариантов было передавать параметры либо через URL при запросе, либо через свойство QueryString, что в принципе одно и тоже. Но этого метода пришлось отказаться так как он не обеспечивает должной безопастности. В число параметров входили логи и пароль, а при передаче данных через адресную строку они записываются в лог файлах Web сервера. В этом случае конфидициальная информация становится практически общедоступной - а это недопустимо

Поиск в сети наводил на мысль что поставленную задачу возможно решить только низкоуровневой реализацией протокола HTTP. Но во время поисков появилась мысль использовать для передачи параметров заголовок HTTP. Эта мысль оказалась удачной и была успешно осуществленна

WebClient содержит свойство Header в котором хранятся всех заголовки HTTP. Также это свойство позволяет добавлять произвольный заголовок в виде "имя"-"значение"

Поэтому перед загрузкой файла в заголовок объекта WebClient были добавлены заголовки с требуемыми параметрами.
Примерно так:
Dim web As New Sytem.Net.WebClient()
web.Headers.Add("upload_login", LoginStr)
web.Headers.Add("upload_password", PasswordStr)
web.UploadFile("http://site.com/script.php", "POST", "c:\autoexec.bat")

На строне сервера, в скрипте script.php были получены следующие переменные:
$_SERVER["HTTP_UPLOAD_LOGIN"] - значение переменной LoginStr
$_SERVER["HTTP_UPLOAD_PASSWORD"] - значение переменной PasswordStr
$_FILE["file"] - информация о закачаном файле

Вот такой нестандартный метод решения стандартной задачи о закачке файла на сервер

К списку статей

Copyright © 2005 by PWS.RU