![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузить фаил на сервер [D7, WinXP]
Alex_C © (2007-10-23 11:30:00)Есть страничка, через которую можно загрузить фаил на сервер. Делаю следующее:
const
multipart_boundary = '-----------------------------7cf87224d2020a';
var
PostStr: TStringList;
...
PostStr := TStringList.Create;
PostStr.Add( 'Content-type: multipart/form-data, boundary=' + multipart_boundary );
//***
PostStr.Add( '--'+ multipart_boundary );
PostStr.Add( 'content-disposition: form-data; name="upfile"; filename="Temp.exe"');
PostStr.Add( 'Content-Type: application/octet-stream');
PostStr.Add( 'Content-Transfer-Encoding: binary');
PostStr.Add( '' );
Далее здесь как я понял из описания, должно быть содержание этого файла. Вопрос - как бинарный фаил закодировать и поместить сюда?
P.S. Таким методом запрос для заполнения полей делал - все отлично даботает. а вот как не-текстовый фаил поместить - не понял.
Alex_C (2007-10-23 15:39:00) [1]Вопрос особенно по строке 'Content-type: tq8' - это правильно для файла с моим расширением? И правильно ли я вычислил длину?
Alex_C (2007-10-23 15:37:00) [2]Все вроде сделал правильно, но не работает. Может кто чего подскажет?
Вот собственно сам текст:
PostStr := TStringList.Create;
// Заголовок
PostStr.Add( '--'+ multipart_boundary );
PostStr.Add( 'Content-Disposition: form-data; name="upfile"; filename="'+
CurrDir + '\Log\UploadToLoTW.tq8"');
PostStr.Add( 'Content-type: tq8' );
PostStr.Add( '' );
// Считываем фаил в поток и загружает его
fstream := TFileStream.Create( CurrDir + '\Log\UploadToLoTW.tq8', fmOpenRead+fmShareDenyNone );
sstream := TStringStream.Create('');
sstream.CopyFrom(fstream, 0);
fstream.Free;
PostStr.Add(sstream.DataString);
sstream.Free;
// Добавляем окончание
PostStr.Add( '' );
PostStr.Add( '--' + multipart_boundary + '--' );
// Вычисляем длинну
ContentLength := Length(PostStr.Text);
// Добавляем заголовок
PostStr.Insert( 0, 'Content-type: multipart/form-data, boundary=' + multipart_boundary );
PostStr.Insert( 1, 'Content-length: ' + IntToStr( ContentLength) );
PostStr.Insert( 2, '' );
Вроде все как положено, но фаил не отправляется
Alex_C (2007-10-23 14:00:00) [3]Блин спасибо! Собственно так и думал, но вот эту строку не сообразил как правильно написать:
PostStr.Add(sstream.DataString);
Спасибо!
umbra (2007-10-23 11:53:00) [4]
> а вот как не-текстовый фаил поместить - не понял
fstream := TFileStream.Create('Temp.exe', fmOpenRead or fmShareDenyWrite);
sstream := TStringStream.Create('');
sstream.CopyFrom(fstream, 0);
fstream.Free;
PostStr.Add(sstream.DataString);
sstream.Free;