`
totoxian
  • 浏览: 1073998 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

一个http upload问题

 
阅读更多

huananshi

2005-12-01, 11:23

我原来在GetNextDataPart直接把想要传的数据upload
aDataPart.set(/*
整个数据*/)

没有出现任何问题,

我现在想把文件分成n块传送,块长度为1k
TBool CHttpEngine::GetNextDataPart(TPtrC8& aDataPart)
{
TInt iLen = iPostData->Length() - iDataChunkCount * 1024;
if(iLen > 1024)
iReqBodySubmitBufferPtr = iPostData->Mid(iDataChunkCount * 1024, 1024) ;
else if(iLen>=0 )
iReqBodySubmitBufferPtr = iPostData->Mid(iDataChunkCount * 1024, iLen) ;

aDataPart.Set(iReqBodySubmitBufferPtr);
++iDataChunkCount;

return !(iLen - 1024 >0) ;
}
void CHttpEngine::ReleaseData()
{
TPtr8 buff = iReqBodySubmitBuffer->Des();
buff.Zero();
TRAPD(err, iTransaction.NotifyNewRequestBodyPartL());
}
TInt CHttpEngine::OverallDataSize()
{
if(iPostData)
return iPostData->Length();
else
return KErrNotFound ;
}

这三个函数我都重载了,可为什么发完最后的包,执行并没有按预期的那样接收到消息并跳到
void CHttpEngine::MHFRunL(RHTTPTransaction aTransaction,
const THTTPEvent& aEvent)

而是直接非法关闭了,我用一个1577byte长度的文件测试,执行了两次 getnextdatapart,每步我都仔细看过,并没发现任何错误, 知道这是什么问题?我还对比了例子HTTPEXAMPLECLIENT ,也没找到原因,谢谢各位了!

beover1984

2005-12-02, 02:17

检查一下GetNextDataPart(TPtrC8& aDataPart)的返回值是不是对你的程序逻辑有影响,然后你再发一个1024大小的文件试试.

huananshi

2005-12-02, 02:27

不好意思,我没理解您的意思,GetNextDataPart不是s60自己调用的么,什么情况下会对我程序的逻辑有影响?我发的数据包括http的一些信息,总共是1577,如果只发一个文件为1024的不行吧?您的意思是不是说加上包头信息总共是1024个字节的大小?

beover1984

2005-12-02, 03:50

void CHttpEngine::ReleaseData()
{
TPtr8 buff = iReqBodySubmitBuffer->Des();
buff.Zero();
TRAPD(err, iTransaction.NotifyNewRequestBodyPartL());
if (err != KErrNone) //
加上这句判断err的值是什么
{
//
出错处理
}
}

huananshi

2005-12-02, 04:12

始终是0,稍等,我正用小于1024的文件测试,出现正常上传和非法两种情况了,哈,离胜利近了一步:)

huananshi

2005-12-02, 04:27

晕!!小于1024的文件,如果在ReleaseData()函数中不调用iTransaction.NotifyNewRequestBodyPartL()执行就没问题,一调用这个函数肯定出错,
而我的err 始终= 0 没错。。。。。我分块的数据有问题么?我的理解是就把整个包当成一个数据buffer,况且一个1024以下的数据,一次传过去怎么也会出错呢???

huananshi

2005-12-02, 04:49

应该不是我代码里的错误吧??出错的时候我看了call stack,并没有我的代码,我觉得倒象是崩在s60的某个lib里,所有相关的代码我都下断点了,并没有一个断下来的,应该是s60内部处理的一个错误....我搞s60的过程中多次遇到这种死到s60里的情况,每次遇到这种问题,都没办法解决,也不知道问题出在什么地方,最后就只能换种方式了....难道s60的调试查错能力就只有这种程度啊? 但是这回我这个分块的功能却没有别的办法绕开,只能把这个bug找出来,没有别的办法了么?今天可周末了啊,屁股没开净,周末会过的很难受的:(

huananshi

2005-12-02, 05:20

哈哈,解决了!!问题找到了!!!
NotifyNewRequestBodyPartL()
void NotifyNewRequestBodyPartL(THTTPFilterHandle aStart=THTTPFilterHandle::EClient);
Description
Notifies the framework of the availability of more request body data.

This is used when submitting body data in several parts.

其实函数说明说的也算清楚,当还有数据没传完的时候才调用此函数,所以说,当getnextdatapart函数最后一步返回true的时候ReleaseData()就不应该再调用NotifyNewRequestBodyPartL()!可是最可气的是,httpexample本身就是错的,竟然没有此判断!!!!误导我一直再怀疑是不是自己的代码有内存泄漏,或是NotifyNewRequestBodyPartL的默认参数是否需要修改...还好算是解决了,谢谢beover1984 的帮忙,论坛需要你这样的热心人,非常感谢:)

分享到:
评论

相关推荐

    httpupload5

    "HttpUpload5"是一个专为实现图片和文件上传功能而设计的组件,它提供了一种高效、便捷的方式,使得用户可以轻松地将本地文件上传到服务器,并且在上传过程中能够实时显示进度条,增强了用户体验。这个组件对于需要...

    在单片机上实现http upload 小文件上传

    在单片机上实现HTTP Upload,首先需要一个支持HTTP协议的客户端库。在这个例子中,我们看到有两个源文件`http_client.c`和`http_client.h`,它们很可能是用于处理HTTP请求的库。这个库应该包含初始化连接、设置HTTP...

    nginx-upload-module-master.rar_modules_nginx_upload

    Nginx Upload Module 是一款为 Nginx Web 服务器设计的扩展模块,主要用于处理文件上传功能。它提供了高效、灵活且可靠的文件上传解决方案,支持大文件分块上传以及断点续传,是许多 web 应用程序在后端处理用户上传...

    java上传文件(upload)

    `jsmartcom.jar`是一个用于文件上传的第三方库,它简化了这个过程并提供了对中文文件名的良好支持。下面将详细介绍如何使用Java结合`jsmartcom.jar`进行文件上传以及相关知识点。 首先,了解`jsmartcom.jar`库。这...

    jsp-upload.rar_http upload_jsp fileupload

    标题 "jsp-upload.rar_http upload_jsp fileupload" 暗示了这个压缩包包含了一个简单的JSP文件上传示例,使用了Apache Commons FileUpload库,版本为1.2.1,来实现HTTP服务器上的文件上传功能。Apache Commons ...

    Chilkat.Upload activex 上传组件

    总的来说,Chilkat.Upload ActiveX 上传组件为开发者提供了一个强大且灵活的文件上传解决方案,尤其在需要与PHP结合使用的场合,通过其丰富的API和良好的文档支持,能够方便地集成到各种应用程序中。

    风声无组件上传类UpLoadClass

    例如,可以创建一个上传接口,通过HTTP请求接收客户端上传的文件,UpLoadClass会处理文件的接收和保存过程。 UpLoadClass可能包含以下关键功能: 1. **文件接收**:当用户选择文件后,UpLoadClass会监听HTTP请求中...

    nginx-upload-module-2.0.tar.gz

    Nginx是一个高性能的HTTP...总之,`nginx-upload-module`是一个强大的工具,它增强了Nginx处理文件上传的能力,但需要注意与不同Nginx版本的兼容性问题。通过正确配置和定制,你可以构建一个高效且安全的文件上传系统。

    upload

    如果这是一个完整的项目,可能还包括数据库配置、路由处理、错误处理、日志记录等多个方面的内容。 总之,上传功能是Web开发中的核心部分,涉及到前端交互、后端处理、文件安全与存储等多个知识点。深入研究并理解...

    jspupload文件上传

    "jspupload"就是这样一个专门用于处理JSP文件上传的工具或者方法。本文将详细介绍JSPUpload的原理、实现方式以及常见问题。 ### 1. JSPUpload 原理 JSPUpload是基于HTTP协议中的multipart/form-data编码类型来实现...

    ajaxUpload.

    2. 创建XMLHttpRequest对象:JavaScript创建一个XMLHttpRequest实例,用于与服务器交互。 3. 发起POST请求:利用XMLHttpRequest的`open()`和`send()`方法发起HTTP POST请求,文件数据作为请求体发送。 4. 服务器处理...

    nginx-upload-module-2.2.

    Nginx Upload Module是一个第三方模块,用于处理HTTP请求中的文件上传。它允许你在Nginx服务器端接收并处理大文件上传,无需将文件流经应用程序服务器,从而提高了性能和效率。2.2版本修复了一些已知问题,提升了...

    servlet的upload方法

    5. **响应处理**:最后,Servlet应返回一个响应告知客户端上传是否成功,可以是JSON、XML或简单的文本消息。 在压缩包文件`upload.zip`中,可能包含了实现上述功能的示例代码,包括Servlet类、HTML表单和可能的配置...

    upload上传源代码

    在IT行业中,文件上传功能是Web应用中常见且重要的组成部分,尤其对于初学者而言,理解并实现文件上传的源代码...同时,了解并掌握文件上传的安全性问题,如防止SQL注入、XSS攻击,也是每个开发者必须掌握的基本技能。

    jsp_upload_0.2.1.zip_java upload_upload

    标题“jsp_upload_0.2.1.zip_java upload_upload”暗示了这是一个关于Java Web应用程序的压缩包,专注于文件上传功能。这个版本号0.2.1可能代表这是该软件的一个迭代版本,通常意味着它在先前版本的基础上进行了改进...

    Html5Upload

    HTML5Upload是一个基于HTML5技术实现的图片上传功能,它具有拖放(Drag and Drop)的特性,使得用户可以通过直接在网页上拖动文件到指定区域来实现上传。这项技术的实现大大提升了用户体验,简化了传统点击选择文件的...

    Persits.Upload(AspUpload上传组件)

    **Persits.Upload(AspUpload上传组件)** 是一个在ASP(Active Server Pages)环境中用于处理文件上传功能的组件。这个组件极大地简化了开发者在Web应用中处理用户上传文件的复杂性,提供了高效、稳定且易用的解决...

    struts upload 包及源码

    Struts2是一个非常流行的Java Web框架,用于构建企业级应用程序。在给定的"struts upload 包及源码"中,重点是Struts2的文件上传功能。这个功能允许用户通过Web表单上传文件到服务器,对于处理图像、文档和其他用户...

    nginx-upload文件上传代码和工具

    `nginx-upload`模块是Nginx的一个第三方插件,由Uploading.com公司开发,它允许用户通过HTTP POST或PUT方法在服务器上上传大文件,同时支持断点续传和文件分块上传。这个模块的核心优点是能够减轻应用程序服务器的...

    nginx1.16+nginx-upstream-check-module-master+nginx-upload-module

    这里我们关注的是一个包含特定模块的Nginx配置:`nginx1.16`,`nginx-upstream-check-module-master` 和 `nginx-upload-module`。这三个组件将帮助我们增强Nginx在处理后端服务健康检查、文件上传等方面的功能。 ...

Global site tag (gtag.js) - Google Analytics