Конференция "Сети" » Не получается отправить объявление с фото на сайт. IdHTTP [D7, WinXP]
 
  • TechnoMag © (16.11.10 18:31) [0]
    Люди помогите :wall: Испробовал уйму вариантов. Может какой-то нюанс есть, а я его не знаю.

    Аплоад фото на сайт происходит, но после подтверждения добавления объявления, фото не отображается (есть только рамка с местом под фото).

    порядок добавления фото такой:

    :18:POST:200:418 :text/html:http://www.avito.ru/additem/upload



    возвращается строка /tmp_images/128999e90f5bf131f292a2cd93106e07-1289162335_80x60.jpg
    если получена эта строка, то аплоад произошел успешно
    этот результат записывается в параметре images[]

         :20:POST:302:2,85 K:text/html:http://www.avito.ru/additem: /additem/confirme
         :21:GET:200:4,23 K:text/html:http://www.avito.ru/additem/confirme



    предпросмотр (если валидация пройдена успешно)

         :36:POST:302:332 :text/html:http://www.avito.ru/additem/confirme: /additem/finish
         :37:GET:200:4,64 K:text/html:http://www.avito.ru/additem/finish



    подтвержнение добавления. оно же запись на сервер


         procedure TForm1.PreSend;
         // подготовка данных к отправке
         var
           i:integer;
         begin
             Stream.AddFormField(idCategory, ADOTable2.FieldByName('Rubric').AsString);
             Stream.AddFormField(idCity, ADOTable2.FieldByName('City').AsString);
             if ADOTable2.FieldByName('Metro').AsString<>'' then
               Stream.AddFormField(idMetro, ADOTable2.FieldByName('Metro').AsString);
         
             Stream.AddFormField(idTitle,    AnsiToUtf8(ADOTable2.FieldByName('Title').AsString));
             Stream.AddFormField(idDescription, AnsiToUtf8(ADOTable2.FieldByName('Text').AsString));
             Stream.AddFormField(idSale, ADOTable2.FieldByName('BuySell').AsString);
             Stream.AddFormField(idPrice, ADOTable2.FieldByName('Price').AsString);
             Stream.AddFormField(idAllowMail, ADOTable2.FieldByName('Notify').AsString);
             Stream.AddFormField(idImage, '');
             Stream.AddFormField(idMail, ADOTable1.FieldByName('Mail').AsString);
             Stream.AddFormField(idName, AnsiToUtf8(ADOTable1.FieldByName('Name').AsString));
             Stream.AddFormField(idPhone, ADOTable1.FieldByName('Phone').AsString);
         
             for I := 0 to 7 do
             begin
               if AdoTable2.FieldByName('Param'+IntTostr(i+1)).AsString<>'' then
                 begin
                    Stream.AddFormField(idParam + '[' + ADOTable2.FieldByName('idParam'+IntToStr(i+1)).AsString + ']',
                       ADOTable2.FieldByName('Param'+IntToStr(i+1)).AsString);
                 end;
             end;
         end;
         
         
         procedure TForm1.SendDeclaration;
         // отправляем объявление
         var
           file1:string;
           tempImages:TStringList;
           myStream: TStringStream;
           memStream: TFileStream;
           //memStream: TMemoryStream;
           //i:integer;
         begin
           tempImages:=TStringList.Create;
            //for i := 1 to 5 do
            //begin
             Client.Request.ContentType:='multipart/form-data';
             if FileExists(ADOTable2.FieldByName('Photo1').AsString) then
             begin
               Stream := TIdMultipartFormDataStream.Create;
               Stream.AddFile('image',   '006.JPG',  'image/jpeg');
                tempImages.Add(Client.Post('http://www.avito.ru/additem/upload', Stream));
               Form1.UpDate;
               Stream.Free;
             end;
            //end;
              Client.Request.ContentType:='multipart/form-data';
              Client.Request.ContentLanguage:='ru';
              Client.Request.Host:='www.avito.ru';
              Client.Request.Connection:='keep-alive';
              Client.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)';
              Client.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
              Client.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3';
              Client.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
              Client.Request.AcceptEncoding:='utf-8';
              Client.Request.Referer:='http://www.avito.ru/additem';
           Stream := TIdMultipartFormDataStream.Create;
           PreSend;
           if tempImages.Count>0 then
           begin
             //Stream.AddFile('image',   '006.JPG'{ADOTable2.FieldByName('Photo1').AsString},    'image/jpeg');
             Stream.AddFormField('images[]', Utf8ToAnsi(tempImages.Strings[0]));
           end;
           Client.Post('http://www.avito.ru/additem', Stream);
           Stream.Free;
           Form1.UpDate;
           Client.Request.Referer:='http://www.avito.ru/additem/confirme';
           Client.Request.ContentType:='application/x-www-form-urlencoded';
           Stream := TIdMultipartFormDataStream.Create;
           Stream.AddFormField('done', 'Готово >');
           Client.Post('http://www.avito.ru/additem/confirme', Stream);
           Stream.Free;
           tempImages.Clear;
           tempImages.Free;
         end;

  • Palladin © (17.11.10 07:59) [1]
              Stream := TIdMultipartFormDataStream.Create;
              Stream.AddFile('image',   '006.JPG',  'image/jpeg');
               tempImages.Add(Client.Post('http://www.avito.ru/additem/upload', Stream));
              Form1.UpDate;
              Stream.Free;


    прокомментируй каждую строчку
  • TechnoMag © (17.11.10 16:28) [2]
    Stream := TIdMultipartFormDataStream.Create; // создаем поток, в который будем ложить даные для отправки
    Stream.AddFile('image',   '006.JPG',  'image/jpeg'); // загружаем в поток файл для отправки из тек. директории
    tempImages.Add(Client.Post('http://www.avito.ru/additem/upload', Stream)); // отправляем файл и добавляем в StringList строку которая будет возвращена сервером
    Form1.UpDate; // перерисовываем форму
    Stream.Free; // освобождаем поток

  • TechnoMag © (19.11.10 01:29) [3]
    все. вопрос решен. Правда несколько обходным путем.
 
Конференция "Сети" » Не получается отправить объявление с фото на сайт. IdHTTP [D7, WinXP]
Есть новые Нет новых   [134436   +25][b:0][p:0.006]