답변이 없어서 다시 올립니다.
이번에 Active Server Component로 upload를 할려고 하는데..
문자열에 관해서 에러가 납니다.. 여러 고수님의 지도 부탁드립니다.
어려운 것은 아니라고 생각이 드는데.. 전 델파이 기초가 부족해서...
소스를 보시고 ..... 꼭 해답을 주세요.. 2주간 잠도 제대로 못 잠...
부탁드립니다
/////////////////////////////////////////////////////
(소스1)
Function XXXX
Var
UploadFile :WideString;
TotalByte : Olevariant;
Data : String;
fsFile : TFileStream
Begin
TotalByte : Request.TotalByte;
UploadFile : Request.BinaryRead(TotalByte);
// 위는 화일을 전송하는 것을 Uploadfile에 저장
**질문1: //아래와 같이 그대로 저장을 하면 절반밖에 들어가지 않아요
fsFile := TFileStream.Create(XXX)
try
tsFile.Write(PChar(UploadFile)^,Length(UploadFile));
finally
tsFile.free;
End;
Response.Write(UploadFile);
//위와 같이하면 깨져서 나옴
Response.BinaryWrite(UploadFile);
//위와 같이하면 화면에 올바로 출력
End
//왜 반밖에 저장이 되지 않으며 Response 구문에서 깨져나오는 것과 바른것과의 차이
WriteBinary로 하면 바로 나오는데... 이 내용을 String으로 바꾸는 방법
소스2)
Function XXXX
Var
UploadFile :WideString;
TotalByte : Olevariant;
Data : String;
fsFile : TFileStream
Begin
TotalByte : Request.TotalByte;
UploadFile : Request.BinaryRead(TotalByte);
// 위는 화일을 전송하는 것을 Uploadfile에 저장
Data := UploadFile+AnsiLowCase(UploadFile)
// 이런식으로하면.. 아래에서 화일에 반이 아닌 모두다 저장이 됩니다..
*질문2 여기서 AnsiLowCase는 소문자로 바꾸어지는 것이 아닌가요?
그런데.... 왜 Upload 된 데이터가 다 만들어지죠?
fsFile := TFileStream.Create(XXX)
try
tsFile.Write(PChar(Data)^,Length(Data));
finally
tsFile.free;
End;
질문3 // 여기서 Response에서 Write를 하면 깨져나옵니다.(화일은 정상으로 저장)
Response.Write(UploadFile);
질문4 // 여기서 Response에서 BinaryWrite를 하면 아주 정상적으로 나옵니다.
Response.BinaryWrite(UploadFile);
End
마지막으로 정리하면
1. WideString으로 받으면 왜 반밖에 저장이 안되나요?(2Byte때문?)
2. String으로 받으면 저장할때 완전히 깨어짐(WideString->String 으로 변환필요)
어떻게 변환을 해죠?
그리고 UniCode <-> AnsiCode 바꾸어 주어야 하는데.. 어떻게
3. AnsiLowCase를 하면 왜 MultiByte에서 나머지 반이 합쳐지죠?(소문자로 바꾸는 함수아닌가?)
4. 파일은 바로 저장(Binary)되는데 브라우저에서 보여질때는 깨져나오나요? (Binary로 되어 있어서 출력을 하면 깨지는데.. 이것을 다시 String으로 어떻게 바꾸나요?)
5. 마지막에 binarywrite를 쓰면 바로 화면에 출력이되는데. 이 binary를
어떻게 String으로 변환을 하죠
넘 길었죠??? 한 2주간 이문제로 잠을 못 자고 있어요... 부탁드립니다