
Новичок
Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.6.2005
Репутация: нет Всего: нет
|
отправляю base64-кодированный файл в POSTом на сервер с аутентификацией. Файл больше 64 кб не уходит  ( Почему? Ведь base64 это то же текст... IE говорит "Действие отменено" а если ходить через проксю - SQUID говорит "Zero Sized Reply" Хотя обычный текст размером 3 мб тоже не уходит. И без аутентификации... Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; WebBrowser1: TWebBrowser; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
uses Base64Unit;
{$R *.dfm} function UrlEncode(Str: string): string; function CharToHex(Ch: Char): Integer; asm and eax, 0FFh mov ah, al shr al, 4 and ah, 00fh cmp al, 00ah jl @@10 sub al, 00ah add al, 041h jmp @@20 @@10: add al, 030h @@20: cmp ah, 00ah jl @@30 sub ah, 00ah add ah, 041h jmp @@40 @@30: add ah, 030h @@40: shl eax, 8 mov al, '%' end; var i, Len: Integer; Ch: Char; N: Integer; P: PChar; begin Result := ''; Len := Length(Str); P := PChar(@N); for i := 1 to Len do begin Ch := Str[i]; if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_'] then Result := Result + Ch else begin if Ch = ' ' then Result := Result + '+' else begin N := CharToHex(Ch); Result := Result + P; end; end; end; end;
procedure TForm1.Button1Click(Sender: TObject); const Base64MaxLength = 72; var hFile:Integer; base64String:String; base64File:TextFile; Base64:TBase64; Buf:Array[0..2] Of Byte; begin base64String:=''; hFile:=FileOpen('file.zip',fmOpenReadWrite); AssignFile(base64File,'file.zip.b64'); Rewrite(base64File); FillChar(Buf,SizeOf(Buf),#0); repeat Base64.ByteCount:=FileRead(hFile,Buf,SizeOf(Buf)); Move(Buf,Base64.ByteArr,SizeOf(Buf)); base64String:=base64String+CodeBase64(Base64); if Length(base64String)=Base64MaxLength then begin Writeln(base64File,base64String); base64String:=''; end; until Base64.ByteCount < 3; Writeln(base64File,base64String); CloseFile(base64File); FileClose(hFile); Memo1.Lines.LoadFromFile('file.zip.b64'); end;
procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('file.zip.b64'); end;
procedure TForm1.Button3Click(Sender: TObject); var strPostData: string; Data:Pointer; URL,Flags,TargetFrameName,PostData,Headers:OleVariant; begin strPostData:='file='+URLEncode(Memo1.Text); PostData := VarArrayCreate([0, Length(strPostData) - 1], varByte); Data := VarArrayLock(PostData); try Move(strPostData[1], Data^, Length(strPostData)); finally VarArrayUnlock(PostData); end; URL := 'http://site.org/postfile.php'; Flags := EmptyParam; TargetFrameName := EmptyParam; Headers := 'Content-Type: application/x-www-form-urlencoded'+ #10#13#0; WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers); end;
end.
|
Это сообщение отредактировал(а) mkmv - 25.8.2006, 12:00
|