3,120
社区成员
发帖
与我相关
我的任务
分享
MHTTPDataSupplier* body = aTransaction.Response().Body();
TPtrC8 dataChunk;
TBool isLast = body->GetNextDataPart(dataChunk);
HBufC* buf16=CnvUtfConverter::ConvertToUnicodeFromUtf8L(dataChunk);
CleanupStack::PushL(buf16);
HBufC8* buf8 = HBufC8::NewL(buf16->Length());
CleanupStack::PushL(buf8);
TPtrC8 ptr(buf8->Des());
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
RFile file;
TInt err=file.Open(fs, iFile, EFileWrite);
CleanupClosePushL(file);
if (err==KErrNotFound) // file does not exist - create it
{
err=file.Create(fs,iDuKuFile,EFileWrite);
}
TInt aPos=0;
file.Seek(ESeekCurrent, aPos);
file.Write(ptr); //save the file being downloaded
file.Close();
CleanupStack::PopAndDestroy(4);
MHTTPDataSupplier* body = aTransaction.Response().Body();
TPtrC8 dataChunk;
TBool isLast = body->GetNextDataPart(dataChunk);
//--------ansi转Unicode--------------
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
// Check if there is conversion between GBK/GB2312 and unicode
// if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312,
if( converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
fs) == CCnvCharacterSetConverter::EAvailable )
{
// Do nothing about it
}
else if ( converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312,
fs)!= CCnvCharacterSetConverter::EAvailable )
{
CleanupStack::PopAndDestroy();
User::Leave( KErrNotSupported );
}
TInt state=CCnvCharacterSetConverter::KStateDefault;
HBufC* iInfoText = HBufC::NewL( dataChunk.Length() );
TPtr16 ptr16 = iInfoText->Des();
if( CCnvCharacterSetConverter::EErrorIllFormedInput ==
converter->ConvertToUnicode(ptr16, dataChunk, state ) )
{
CleanupStack::PopAndDestroy();
User::Leave(KErrArgument); // Leave if error in conversion.
}
CleanupStack::PopAndDestroy(); // Clean for converter
//HBufC* buf16=CnvUtfConverter::ConvertToUnicodeFromUtf8L(dataChunk);
//CleanupStack::PushL(buf16);
//TEMP STUFF
HBufC8* tempBuffer = HBufC8::NewL(ptr16.Length());
CleanupStack::PushL(tempBuffer );
TPtrC8 ptr(tempBuffer->Des());
RFile file;
TInt err=file.Open(fs, iDuKuFile, EFileWrite);
CleanupClosePushL(file);
if (err==KErrNotFound) // file does not exist - create it
{
err=file.Create(fs,iDuKuFile,EFileWrite);
}
TInt aPos=0;
file.Seek(ESeekCurrent, aPos);
file.Write(ptr); //save the file being downloaded
file.Close();
CleanupStack::PopAndDestroy(3);
// This client accepts all content types.
// (change to e.g. "text/plain" for plain text only)
_LIT8(KAccept, "*/*");
void CMyHttpEngine::MHFRunL(RHTTPTransaction aTransaction,
const THTTPEvent& aEvent)
{
switch (aEvent.iStatus)
{
case THTTPEvent::EGotResponseHeaders:
{
// Get HTTP status code from header (e.g. 200)
RHTTPResponse resp = aTransaction.Response();
TInt status = resp.StatusCode();
if (status == 200)
{
// 1、此处添加打开文件代码。
}
break;
case THTTPEvent::EGotResponseBodyData:
{
MHTTPDataSupplier* body = aTransaction.Response().Body();
TPtrC8 dataChunk;
// GetNextDataPart() returns ETrue, if the received part is the last
// one.
TBool isLast = body->GetNextDataPart(dataChunk);
// 2、此处将dataChunk写入文件。
if (isLast)
{
// 3、收到最后数据块,此处关闭文件
}
// Always remember to release the body data.
body->ReleaseData();
}
break;
...
}