m_farshad
پنج شنبه 25 خرداد 1391, 20:47 عصر
با سلام
من یه برنامه رو سیستم سرور دارم که میتونه عملیات فایل سرور رو انجام بده
هنگام ارسال فایل از کلاینت به سرور نمیتونم دقیقا همون فایل رو تو سرور بسازم
یعنی اندکی حجم فایل تغییر میکنه تو فایل های متنی مشکلی نیست و لی فایل باینری خراب میشه
کلاینت از idhttpclient استفاده میکنه فایل رو پست میکنه به سرور idhttpserver
اگه دوستان کمک کنن ممنون میشمprocedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
decoder, newdecoder: TIdMessageDecoder;
lEndOfMessage: boolean;
lFileStream: TFileStream;
boundary, startboundary, ln: string;
filepath:string;
begin
filepath:=GetCurrentDir+ARequestInfo.URI;
if ARequestInfo.PostStream <> nil then
begin
boundary := ExtractHeaderSubItem(ARequestInfo.ContentType, 'boundary',
QuoteHTTP);
startboundary := '--' + boundary;
repeat
ln := ReadLnFromStream(ARequestInfo.PostStream, -1, True);
until ln = startboundary;
decoder := TIdMessageDecoderMIME.Create(nil);
try
TIdMessageDecoderMIME(decoder).MIMEBoundary := boundary;
lEndOfMessage := False;
repeat
decoder.SourceStream := ARequestInfo.PostStream;
decoder.FreeSourceStream := false;
decoder.ReadHeader;
case decoder.PartType of
mcptText, mcptAttachment:
begin
lFileStream := TFileStream.Create(filepath, fmCreate);
try
newdecoder := decoder.ReadBody(lFileStream, lEndOfMessage);
decoder.Free;
decoder := newdecoder;
finally
lFileStream.Free;
end;
end;
mcptIgnore:
begin
FreeAndNil(decoder);
decoder := TIdMessageDecoderMIME.Create(nil);
TIdMessageDecoderMIME(decoder).MIMEBoundary := boundary;
end;
mcptEOF:
begin
FreeAndNil(decoder);
lEndOfMessage := True;
end;
end;
until (decoder = nil) or lEndOfMessage;
finally
decoder.Free;
end;
end
من یه برنامه رو سیستم سرور دارم که میتونه عملیات فایل سرور رو انجام بده
هنگام ارسال فایل از کلاینت به سرور نمیتونم دقیقا همون فایل رو تو سرور بسازم
یعنی اندکی حجم فایل تغییر میکنه تو فایل های متنی مشکلی نیست و لی فایل باینری خراب میشه
کلاینت از idhttpclient استفاده میکنه فایل رو پست میکنه به سرور idhttpserver
اگه دوستان کمک کنن ممنون میشمprocedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
decoder, newdecoder: TIdMessageDecoder;
lEndOfMessage: boolean;
lFileStream: TFileStream;
boundary, startboundary, ln: string;
filepath:string;
begin
filepath:=GetCurrentDir+ARequestInfo.URI;
if ARequestInfo.PostStream <> nil then
begin
boundary := ExtractHeaderSubItem(ARequestInfo.ContentType, 'boundary',
QuoteHTTP);
startboundary := '--' + boundary;
repeat
ln := ReadLnFromStream(ARequestInfo.PostStream, -1, True);
until ln = startboundary;
decoder := TIdMessageDecoderMIME.Create(nil);
try
TIdMessageDecoderMIME(decoder).MIMEBoundary := boundary;
lEndOfMessage := False;
repeat
decoder.SourceStream := ARequestInfo.PostStream;
decoder.FreeSourceStream := false;
decoder.ReadHeader;
case decoder.PartType of
mcptText, mcptAttachment:
begin
lFileStream := TFileStream.Create(filepath, fmCreate);
try
newdecoder := decoder.ReadBody(lFileStream, lEndOfMessage);
decoder.Free;
decoder := newdecoder;
finally
lFileStream.Free;
end;
end;
mcptIgnore:
begin
FreeAndNil(decoder);
decoder := TIdMessageDecoderMIME.Create(nil);
TIdMessageDecoderMIME(decoder).MIMEBoundary := boundary;
end;
mcptEOF:
begin
FreeAndNil(decoder);
lEndOfMessage := True;
end;
end;
until (decoder = nil) or lEndOfMessage;
finally
decoder.Free;
end;
end