Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузить фаил на сервер [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо