Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отправка фала на сервер


Автор: panik 17.1.2010, 06:38
Несколько дней уже бьюсь над отправкой файла на сервер.

На сервер приходит файл на 2 байта больше, чем исходный. В конец файла добавляется Enter (перенос каретки).
Может кто знает в чем проблема?

Вот код:
Код

procedure TForm1.Button4Click(Sender: TObject);
    var formData: TIdMultiPartFormDataStream;

begin

formData := TIdMultiPartFormDataStream.Create;

   try

    IdHTTP1 := TidHttp.Create(nil);
   
    formData.AddFormField('FilePart-BeginPosition','0');
    formData.AddFormField('FilePart-EndPosition','5');
    formData.AddFile('file', 'proba1.txt', 'multipart/form-data');
    IdHTTP1.HandleRedirects := True;
    
    IdHTTP1.Request.BasicAuthentication:=true;
    IdHTTP1.Request.Username:='***';
    IdHTTP1.Request.Password:='***';


  IdHTTP1.Request.UserAgent:='Indy';
  IdHTTP1.Request.Accept:='*/*';
  IdHTTP1.Request.Connection:='';
  IdHTTP1.Request.CacheControl:='no-store,no-cache';
  IdHTTP1.Request.Pragma:='no-cache';


   Memo1.text:=IdHTTP1.Post('имя сервера', formData);

   finally
    begin
          IdHTTP1.free;
          formData.Free;
    end;
  end;

end;

Автор: panik 17.1.2010, 17:39
Разобрался!

В самой причине добавления не разобрался, но решил проблему.
Добавил передачу пустой переменной после передачи файла.

Код

formData.AddFile('file', 'proba1.txt', 'multipart/form-data');

formData.AddFormField('','');


В сниффере это выглядит так:
Плохой вариант (добавляется Enter):
Код

----------011610040028527
Content-Disposition: form-data; name="FilePart-BeginPosition"

0
----------011610040028527
Content-Disposition: form-data; name="FilePart-EndPosition"

129
----------011610040028527
Content-Disposition: form-data; name="file"; filename="proba1.txt"
Content-Type: multipart/form-data

Удалось отправить! =)
До этого бился двое суток..два лишних байта в конец файла прибавлялось..
Пришлось пойти обманным путем =)
<----- Ненужный Enter здесь. ------
----------011610040028527



Хороший вариант:
Код

----------011710170046445
Content-Disposition: form-data; name="FilePart-BeginPosition"

0
----------011710170046445
Content-Disposition: form-data; name="FilePart-EndPosition"

129
----------011710170046445
Content-Disposition: form-data; name="file"; filename="proba1.txt"
Content-Type: multipart/form-data

Удалось отправить! =)
До этого бился двое суток..два лишних байта в конец файла прибавлялось..
Пришлось пойти обманным путем =)
----------011710170046445
Content-Disposition: form-data; name=""

<----- Теперь этот ненужный Enter здесь. И на данные файла не влияет.
----------011710170046445--

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)