delphi4arab منتديات دلفي للعرب

نسخة كاملة : خلل في كود رفع tnethttpclient
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

استخدمت الكود اسفله في رفع ملف ولم ينجح عن طريق استخدام tnethttpclient  اما عن طريق idhttp فالرفع تمام

السؤال اين الخلل ؟

في الحقيقة حاولت معرفة السبب والتجربة عدة مرات وتبين لي * لا اعلم ان كان هو السبب الحقيقي * ان اضافة الملف عن طريق idmultipartformdata غير متوافقة مع tnethttpclient لذا حاولت قراءة الملف على شكل سترينغ وارساله عن طريق استخدام tstringlist  لكن لا فائدة ربما  الخلل في طريقة قراءة الملف ربما يقرا 255 محرف فقط  هذا الكود
كود :
var   Stringlist: TStringlist;   begin   if o.Execute then   begin   Stringlist := TStringlist.Create;   Stringlist.Add('file_1_=[ رفع الملفات ]');   Stringlist.Add(format('file_1_=%s', [tfile.ReadAllText(o.FileName)]));   Memo1.Text := NetHTTPClient.Post('https://up.top4top.net/', Stringlist).ContentAsString;   end;

هل يجرب احد عنده رجاءا ربما الخلل بسيط
هكذا يعمل بنجاح

PHP كود :
uses
 System
.Net.HttpClient,
 
System.Net.Mime;

procedure TForm1.Button1Click(Sender: TObject);
var
 
HTTPClient: THTTPClient;
 
Param: TMultipartFormData;
begin
 
if OpenDialog1.Execute then
 begin
   HTTPClient 
:= THTTPClient.Create;
 
  Param := TMultipartFormData.Create;
 
  try
 
    Param.AddFile('file_1_', OpenDialog1.FileName);
 
    Param.AddField('submitr', '[ رفع الملفات ]');
 
    Memo1.Text := HTTPClient.Post('https://up.top4top.net/index.php', Param).ContentAsString;
 
  finally
 
    Param.Free;
 
    HTTPClient.Free;
 
  end;
 
end;
end; 
بارك الله فيك
(17-10-2018, 08:18 PM)Agmcz كتب : [ -> ]هكذا يعمل بنجاح

PHP كود :
uses
 System
.Net.HttpClient,
 
System.Net.Mime;

procedure TForm1.Button1Click(Sender: TObject);
var
 
HTTPClient: THTTPClient;
 
Param: TMultipartFormData;
begin
 
if OpenDialog1.Execute then
 begin
   HTTPClient 
:= THTTPClient.Create;
 
  Param := TMultipartFormData.Create;
 
  try
 
    Param.AddFile('file_1_', OpenDialog1.FileName);
 
    Param.AddField('submitr', '[ رفع الملفات ]');
 
    Memo1.Text := HTTPClient.Post('https://up.top4top.net/index.php', Param).ContentAsString;
 
  finally
 
    Param.Free;
 
    HTTPClient.Free;
 
  end;
 
end;
end; 

ممكن تحويل الكود للتعامل مع idhttp بدال httpclient
تفضل

كود :
uses     ...,  IdMultipartFormData, IdHTTP, IdSSLOpenSSL; procedure TForm1.Button1Click(Sender: TObject); Var IdHTTP1: TIdHTTP; Src: string; LHandler: TIdSSLIOHandlerSocketOpenSSL; lParam: TIdMultiPartFormDataStream; begin if OpenDialog1.Execute then   try     IdHTTP1 := TIdHTTP.Create(nil);     try       LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);       try         lParam := TIdMultiPartFormDataStream.Create;         lParam.AddFile('file_1_', OpenDialog1.FileName);         lParam.AddFormField('submitr', '[ رفع الملفات ]');         IdHTTP1.IOHandler := LHandler;         Src := IdHTTP1.post('https://up.top4top.net', lParam);         Memo1.Text := Src;       finally         lParam.Free;         LHandler.Free;       end;     finally       IdHTTP1.Free;     end;   except     on E: Exception do       Writeln(E.ClassName, ': ', E.Message);   end; end;