用inet上传图片(模拟的是百度空间图片上传)以下为数据包结构(删减)----MULTI-PARTS-FORM-DATA-BOUNDARY
Content-Disposition: form-data; name="num"1600
----MULTI-PARTS-FORM-DATA-BOUNDARY
Content-Disposition: form-data; name="spQuality"KarS096.jpg
----MULTI-PARTS-FORM-DATA-BOUNDARY
Content-Disposition: form-data; name="spPhotoFile0"; filename="C:\Documents and Settings\T.G.H\My Documents\My Pictures\KarS096.jpg"
Content-Type: image/pjpeg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%图片文件码区域%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
----MULTI-PARTS-FORM-DATA-BOUNDARY--
现在需要将以上数据赋值到变量sPost中,然后用inet提交
Inet1.Execute "http://hiup.baidu.com/xxx/upload", "Post", sPost , "Content-Type: xxx"问题出现了.
当sPost为string时,图片文件码会被破坏(open for binary再binaryArr to string)
而inet又不允许提交byte格式(先不说带中文的string转成byte十分困难)那么应该如何提交呢?
有没有办法在不破坏图片文件内容的情况下提交这个数据包呢?
要是可以用16进制保存这些变量就好了啊..

解决方案 »

  1.   

    先把图片文件按字节读出进行BASE64编码,在标题头设置BASE64编码格式,然后上传BASE64编码后的字串就可以了。
      

  2.   

    需要进行BASE64等编码,编码后再发送数据上传上去..
      

  3.   

    请教下:自己抓到的数据包不是BASE64编码过的啊.数据格式不一样也能够成功上传?还有,"题头设置BASE64编码格式"这是什么意思啊,是数据包的header么?该怎样写呢
      

  4.   

    你这个包是服务器返回的响应消息, 是不能直接把他向服务器POST出去的,就算POST出去也没用。你需要构建请求消息头和消息体才能向服务器发送POST。你应该在消息头中声明编码类型\数据长度等等一系列的的消息设置,然后依据你设定的编码类型将要上传的数据编码构成消息体,才能上传。 具体请求和响应消息头的相关设置你可以依据RFC2068的相关格式去构建。
      

  5.   

    回4楼
    这些数据是数据包中data的内容.数据包的其他部分我也仿照抓的包做好了,现在就是图片文件这里的问题了
    抓到的数据包如下
    POST /xlrtx/upload HTTP/1.1
    Content-Type: multipart/form-data; boundary=--MULTI-PARTS-FORM-DATA-BOUNDARY
    Accept: */*
    Content-Length: 129533
    User-Agent: Mozilla/4.0 (compatible; )
    Host: hiup.baidu.com
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: %baiducookie%
    '--------分割线---------
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="fromsobar"1
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="ct"4
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="cm"1
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="BrowserType"1
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="spAlbumName"文件
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="num"1
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="spMaxSize"1280
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="spQuality"80
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="spPhotoText0"1.JPG
    ----MULTI-PARTS-FORM-DATA-BOUNDARY
    Content-Disposition: form-data; name="spPhotoFile0"; filename="C:\1.JPG"
    Content-Type: image/pjpeg
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%图片文件码区域%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ----MULTI-PARTS-FORM-DATA-BOUNDARY--
    现在的问题是:
    要成功发送这个数据包,分割线以下的数据要放到一个变量里
    但是这些数据既包含普通的参数,还包含了图片的文件码
    图片的文件码赋值到string变量中会被破坏
    而这些数据又不能赋值到byte变量中这该怎么做好呢?
    我用的百度工具栏上传的图片,它是怎么做到的?
      

  6.   

    在标题头添加 Accept-Encodeing: base64
    消息体中图片用BASE64编码 上传试试
      

  7.   

    自己搞定了=P
    ADODB+XMLHTTP,谢谢大家帮助
    详细请看
    http://hi.baidu.com/xlrtx/blog/item/12c312332d07f8f01a4cff8b.html