Winsock1.Protocol = sckTCPProtocol
Winsock1.Connect "имя_сервера", 80
While Not Winsock1.State = 7
DoEvents
Wend
Parametrs="параметр1=значение&параметр2=значение"
Winsock1.SendData "POST /адрес_скрипта HTTP/1.1" & vbCrLf
Winsock1.SendData "Content-Type: application/x-www-form-urlencoded" & vbCrLf
Winsock1.SendData "Host: имя_сервера" & vbCrLf
Winsock1.SendData "Content-Length: " & len(Parametrs) & vbCrLf & vbCrLf
Winsock1.SendData Parametrs & vbCrLf
Загрузка файла в фалохранилище
Доброго времени суток, уважаемые форумцы! вы ни один раз выручали, толкали к мыслям меня, спасибо вам огромное!
Надеюсь подскажите и сейчас. :)
Подскажите в каком направлении копаться, необходимо загружать файл с машины на публичные файлохранилища. Каким образом можно организовать загрузку. ТОесть файл выбрали, а каким образом отгружать его на сервер? На всех серверах по разному? Если да, тока как узнать метод которым передаются файлы на том или ином сервере.
Заранее спасибо за ответы, ссылки на эту тематику.
Цитата: Ariman
[Vb.NET]
ТОесть файл выбрали, а каким образом отгружать его на сервер?
ТОесть файл выбрали, а каким образом отгружать его на сервер?
Преобразуй файл к массиву byte[] и вперёд.
Только на сервере должен быть сервис зарегистрирован для remoting.
Цитата: Ariman
[Vb.NET]
... тока как узнать метод которым передаются файлы на том или ином сервере.
... тока как узнать метод которым передаются файлы на том или ином сервере.
Всё зависит как ты сервис организовал.
Вот неплохо бы знать, по какому протоколу данные хочешь на сервер заливать. В основном это FTP, с ним работать не сложно (реализации на C# есть в инете, на крайняк подкинуть могу).
Протокол насколько я понимаю - hhtp
Спасибо за проявленный интерес и ответы.
Цитата: Ariman
Я имею ввиду хранилища а-ля rapidshare, и др. у которых есть возможность загрузки файлов через веб-морду.
Протокол насколько я понимаю - hhtp
Спасибо за проявленный интерес и ответы.
Протокол насколько я понимаю - hhtp
Спасибо за проявленный интерес и ответы.
Объекты HttpWebRequest и HttpWebResponse тебе помогут, сначала создать запрос: объект HttpWebRequest при помощи HttpWebRequest.Create("www.blabla.ru/files"), потом пишешь в GetRequestStream поток байтов, из которого втой файл состоит
Необходимо просто посылать post-запрос c параметрами, на VB Это делается так, насколько я понял:
Код:
Думаю что мне необходимо воплотить совю идею сначала на vb а потом посмотреть в VB.NET. Весь вопрос в том, что нужно еще и получить ответ сервера после того как файл загрузился.
Скажите, я в правильном направлении?
Отбой, пока разобрался с HttpWebRequest и HttpWebResponse. Спасибо за наводку. Дальше пока что сам. :)
Есть поле для выбора файла для загрузки в форме имя его filename и еще пара параметров. Как их вставить в запрос?
прим: string postdata = "filename=C:\\win.txt&name2=qwerty";
как передаются парметры, как правильно написать?
Заранее спасибо за внимание и ответы.
http :// <url>.<domain>/<sub_url>?<name1>=<value1>&<name2>=<value2>
Например:
http :// www. vasya. ru/page2.html?login=johny&id=56
Потом эту строку скармливаешь в HttpWebRequest
Спасибо, насколько я понимаю это GET, а мне POST нужен. Или я ошибаюсь..?
Код:
------------8c947961191233a
Content-Disposition: form-data; name="sfile"; filename="win.txt"
------------8c947961191233a
Content-Disposition: form-data; name="maxFileSize"
30720
------------8c947961191233a
Content-Disposition: form-data; name="agree"
1
------------8c947961191233a
Content-Disposition: form-data; name="x"
67
------------8c947961191233a
Content-Disposition: form-data; name="y"
10
------------8c947961191233a
Content-Disposition: form-data; name="action"
storeFile
------------8c947961191233
Content-Disposition: form-data; name="sfile"; filename="win.txt"
------------8c947961191233a
Content-Disposition: form-data; name="maxFileSize"
30720
------------8c947961191233a
Content-Disposition: form-data; name="agree"
1
------------8c947961191233a
Content-Disposition: form-data; name="x"
67
------------8c947961191233a
Content-Disposition: form-data; name="y"
10
------------8c947961191233a
Content-Disposition: form-data; name="action"
storeFile
------------8c947961191233
А при снифе броузера, при загрузке такого же файла такой:
Код:
-----------------------------3219265987165
Content-Disposition: form-data; name="maxFileSize"
30720
-----------------------------3219265987165
Content-Disposition: form-data; name="action"
storeFile
-----------------------------3219265987165
Content-Disposition: form-data; name="sfile"; filename="win.txt"
Content-Type: text/plain
ывапывапывап
-----------------------------3219265987165
Content-Disposition: form-data; name="agree"
1
-----------------------------3219265987165
Content-Disposition: form-data; name="x"
67
-----------------------------3219265987165
Content-Disposition: form-data; name="y"
10
-----------------------------3219265987165--
Content-Disposition: form-data; name="maxFileSize"
30720
-----------------------------3219265987165
Content-Disposition: form-data; name="action"
storeFile
-----------------------------3219265987165
Content-Disposition: form-data; name="sfile"; filename="win.txt"
Content-Type: text/plain
ывапывапывап
-----------------------------3219265987165
Content-Disposition: form-data; name="agree"
1
-----------------------------3219265987165
Content-Disposition: form-data; name="x"
67
-----------------------------3219265987165
Content-Disposition: form-data; name="y"
10
-----------------------------3219265987165--
И сервер в ответ в моей программе выдает что файл не прикреплен. Меня смущает след строчка:
Код:
Content-Type: text/plain
ывапывапывап
ывапывапывап
Каким-то образом читается файл и передается, и тут же определяется контент-тайп насколько я понимаю. Как добавить чтение файла. :)
Делаю след образом:
Код:
string fileName;
string siteURL="http://site/upload/";
StreamWriter sw = null;
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
fileName = Path.GetFullPath("C:\\win.txt");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(siteURL);
string postdata = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"sfile\"; filename=\"" + Path.GetFileName(fileName) + "\""+"\r\nContent-Disposition: form-data; name=\"sfile\"; filename=\"" + Path.GetFileName(fileName) + "\"" "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"maxFileSize\"" + "\r\n\r\n30720" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"agree\"" + "\r\n\r\n1" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"x\"" + "\r\n\r\n67" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"y\"" + "\r\n\r\n10" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"action\"" + "\r\n\r\nstoreFile" + "\r\n--" + boundary + "\r\n";
req.Method = "POST";
req.ContentLength = postdata.Length;
req.ContentType = "multipart/form-data; boundary=" + boundary;
req.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3";
req.Referer = "http://sit/upload";
sw = new StreamWriter(req.GetRequestStream());
byte[] sendbuffer = Encoding.UTF8.GetBytes(postdata);
sw.Write(postdata);
sw.Close();
WebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader srData = new StreamReader(resp.GetResponseStream());
string outHtml = srData.ReadToEnd();
richTextBox1.Text= outHtml;
resp.Close();
srData.Close();
string siteURL="http://site/upload/";
StreamWriter sw = null;
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
fileName = Path.GetFullPath("C:\\win.txt");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(siteURL);
string postdata = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"sfile\"; filename=\"" + Path.GetFileName(fileName) + "\""+"\r\nContent-Disposition: form-data; name=\"sfile\"; filename=\"" + Path.GetFileName(fileName) + "\"" "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"maxFileSize\"" + "\r\n\r\n30720" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"agree\"" + "\r\n\r\n1" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"x\"" + "\r\n\r\n67" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"y\"" + "\r\n\r\n10" + "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"action\"" + "\r\n\r\nstoreFile" + "\r\n--" + boundary + "\r\n";
req.Method = "POST";
req.ContentLength = postdata.Length;
req.ContentType = "multipart/form-data; boundary=" + boundary;
req.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3";
req.Referer = "http://sit/upload";
sw = new StreamWriter(req.GetRequestStream());
byte[] sendbuffer = Encoding.UTF8.GetBytes(postdata);
sw.Write(postdata);
sw.Close();
WebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader srData = new StreamReader(resp.GetResponseStream());
string outHtml = srData.ReadToEnd();
richTextBox1.Text= outHtml;
resp.Close();
srData.Close();
Может необходимо делать все совсем по другому?
Тип контента должен указываться при отправке файла на сервер, в ответе серверу должно помимо заголовкой отправляться ещёи поток байтов, который является файлом. Посмотри отправляемые данные, так ли это? Может серверу нужен какой-то свой формат запроса
Вот я вот таким образом, как выше пытаюсь загружать через форму. Правильно ли это я понять не могу. :(
Мне кажется я в корне все делаю не правильно.. :(