업로드 부분의 소스는 이렇게 된다...
하지만 한가지 문제가 있다....
procedure TWebModule1.WebModule1UPLOADAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
i: Integer;
L: LongInt;
prtest:String;
filename:string;
Buffer, Prueba: ^Byte;
MemoryStream: TMemoryStream;
MemoryStream1: TMemoryStream;
Nowecb: PEXTENSION_CONTROL_BLOCK;
TotalByte: Integer; //수신될 데이터 크기
begin
MemoryStream := TMemoryStream.Create;
MemoryStream1 := TMemoryStream.Create;
GetMem(Prueba , 11856);
try
Nowecb := TISAPIRequest(Request).ECB;
TotalByte := Nowecb.cbTotalBytes;
Buffer := Nowecb.lpbdata;
L := Nowecb.cbAvailable;
MemoryStream.Write(Buffer^,L); //48k까지의 내용 읽기
Dec(TotalByte, L);
i := L;
while((TotalByte > 0) and (i <> -1)) do
begin
i := Request.ReadClient(Prueba^, 11586);
MemoryStream.Write(Prueba^, i);
Dec(TotalByte, i);
end;
// 메모리 스트림을 스트링으로 빠꾸기 //
MemoryStream.Position:=0;
SetLength(prtest,MemoryStream.Size);
MemoryStream.ReadBuffer(prtest[1],MemoryStream.Size);
// 화일명 잘라내기 //
delete(prtest,1,pos('filename="',prtest)+10);
filename:=copy(prtest,1,pos('"',prtest)-1);
// 화일 내용 잘라내기 //
delete(prtest,1,pos('Contents',prtest)+8);
prtest:=copy(prtest,1,pos('-----------------------------',prtest));
MemoryStream1.WriteBuffer(test[1],sizeof(prtest));
MemoryStream1.SaveToFile('c:temp'+ExtractFileName(filename));
finally
FreeMem(Prueba);
MemoryStream.Free;
MemoryStream1.Free;
end;
end;
화일내용을 잘라 낼수가 없다 막상 이렇게 해도 화일은 저장 되지만
내가 만든 화일 내용 잘라 내기 부분이 되지 않아 화일을 못쓰게 된다.
물론 텍스트로 된것이라면 문제 없지만
방법을 아는 사람이 있으시다면 빠른 제보를 부탁드립니다.
아래를 보니 Pos로 filename=의 스트링을 찾는데 그것보다는 아예 업로드시
'filename='의 스트링의 위치를 맨 첫번째 두바이트에 저장을 시켜 놓고 위의 두 바이트는 처음부터 데이타의 첫부분의 두 바이트이므로 그냥 알아낼 수 있게되죠.
즉, 아래를 보니 파일을 보내면서 파일이름을 붙여서 보내는경우인가 본데 붙이면서 아예 그 위치를 저장하는것입니다. 일정한 위치에 말이죠. 파일이름의 경우 길이가 틀려질 수 있어서 아래처럼 한다고 생각을 합니다.
이곤섭 께서 말씀하시기를...
> 업로드 부분의 소스는 이렇게 된다...
> 하지만 한가지 문제가 있다....
>
> procedure TWebModule1.WebModule1UPLOADAction(Sender: TObject;
> Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
> var
> i: Integer;
> L: LongInt;
> prtest:String;
> filename:string;
> Buffer, Prueba: ^Byte;
> MemoryStream: TMemoryStream;
> MemoryStream1: TMemoryStream;
> Nowecb: PEXTENSION_CONTROL_BLOCK;
> TotalByte: Integer; //수신될 데이터 크기
>
> begin
> MemoryStream := TMemoryStream.Create;
> MemoryStream1 := TMemoryStream.Create;
> GetMem(Prueba , 11856);
> try
> Nowecb := TISAPIRequest(Request).ECB;
>
> TotalByte := Nowecb.cbTotalBytes;
> Buffer := Nowecb.lpbdata;
> L := Nowecb.cbAvailable;
> MemoryStream.Write(Buffer^,L); //48k까지의 내용 읽기
> Dec(TotalByte, L);
> i := L;
> while((TotalByte > 0) and (i <> -1)) do
> begin
> i := Request.ReadClient(Prueba^, 11586);
> MemoryStream.Write(Prueba^, i);
> Dec(TotalByte, i);
> end;
>
> // 메모리 스트림을 스트링으로 빠꾸기 //
> MemoryStream.Position:=0;
> SetLength(prtest,MemoryStream.Size);
> MemoryStream.ReadBuffer(prtest[1],MemoryStream.Size);
>
> // 화일명 잘라내기 //
> delete(prtest,1,pos('filename="',prtest)+10);
> filename:=copy(prtest,1,pos('"',prtest)-1);
>
> // 화일 내용 잘라내기 //
> delete(prtest,1,pos('Contents',prtest)+8);
> prtest:=copy(prtest,1,pos('-----------------------------',prtest));
> MemoryStream1.WriteBuffer(test[1],sizeof(prtest));
> MemoryStream1.SaveToFile('c:temp'+ExtractFileName(filename));
>
> finally
> FreeMem(Prueba);
> MemoryStream.Free;
> MemoryStream1.Free;
> end;
> end;
>
> 화일내용을 잘라 낼수가 없다 막상 이렇게 해도 화일은 저장 되지만
> 내가 만든 화일 내용 잘라 내기 부분이 되지 않아 화일을 못쓰게 된다.
> 물론 텍스트로 된것이라면 문제 없지만
>
> 방법을 아는 사람이 있으시다면 빠른 제보를 부탁드립니다.
>
>