我在程序里使用了CAtlHttpClient类,设置的请求方法是“POST”,期望得到的返回数据(除了http头)是: 文本信息1图片文件数据。其中数字1是用来分割两个数据区的
但奇怪的是,我能得到正确大小的数据,前段的文本信息是完全正常的,但后面的图片文件数据却是错误的。
但是,如果我让服务器端将“图片数据文件”改为一个文本文件数据,则一切又都是正常的
这实在让我很恼火。。
对了,通过抓包得知,请求的“图片文件数据”是正确的,但是是哟个CAtlHttpClient的getBody()方法得到的数据却不对。
请求高手指点!

解决方案 »

  1.   

    server端传图片过来的时候是按文件直接读的数据,并没有分是什么类型的文件,都是以二进制对待的,而且http抓包发现数据是正确的!
    我用jsp写的web端就可以正常读到图片数据
    但我现在是用MFC写的一个activex控件里用CAtlHttpClient这个类来做http客户端,是不是java和c++对待二进制数据还不一样呢!
      

  2.   

    http://msdn2.microsoft.com/en-us/library/f3wxbf3f(VS.80).aspxIf the URL indicates an image, the sample displays the image in a separate dialog box.
      

  3.   

    问题已解决,确实是二进制数据的问题。
    由于server端传过来的数据是chunked编码的,CAtlHttpClient在从socket读取数据的时候因为某些二进制图片数据使得CAtlHttpClient类错认为停止符,因此只读取了前面很小一部分的数据,后面的数据都被丢弃了。
    而java封装的http类对这个处理就不如C++那么敏感,因此jsp页面能够正常显示。
    最后解决的办法是:用base64编码把发送的图片数据编码,全部转换为可识别的ASC码,接受端再解码,这样问题就解决了!
      

  4.   

    转换为base64码是一个不错的方法。另外的一种解决办法是:图片数据在body中返回,而其他数据可以放在Header中返回,即增加自定义的Header。
      

  5.   

    我也在用这个CAtlHttpClient, 顺便在这里问一下, 请楼主别见怪.
    我想用CAtlHttpClient传一个大文件(比如>1G的文件), 但我见GetBody是一次性的返回所有的数据,
    这样的话我就是分配一个大数组,这是不可能是的, 请问各位有没有其它的方法呢?