lwqq007
2015-10-07 10:20
采纳率: 100%
浏览 4.3k
已采纳

libcurl Post 方法上传文件求助!

Hi,
我在我的虚拟机上编译好了libcurl库,然后参照列程写了个简单的http post上传文件。
在构建form表单的时候,如果把参数设置为CURLFORM_FILE 并输入对应的文件名,可以再服务器(HFS)指定的文件路径下看到我上传的文件。
但我要使用libcurl的平台没有文件系统,所以就打算用CURLFORM_BUFFER参数来设置数据区。结果这个能够上传,可是不能再文件路径下看到这个文件。
HFS的上传权限打开了的。
对比两种方式的wireshark包,发现在Content-Disposition这个请求头后面的filename没指定。
于是用curl_slist_append却手动设定这个值为我想要的任意名称,问题又来了,正常的流程中,filename这个参数
是添加在MIME Multipart Media后面的。但手动添加的curl_list却在Hypertext Transfer Procotol后面。这下查找了好久的资料也没看到怎么处理,网上各位大神弄的都是一个文件上传到另一个文件的方式。
请问谁有经验,麻烦解惑,谢谢!
上传测试源代码和两个wireshark截图 success.bmp(直接传入file方式,可以创建文件的截图)fail.bmp(用缓冲区地址作为数据输入,不可以创建制定的文件) main.c 测试程序
没看到哪儿上传附件,我发个链接,谢谢!http://pan.baidu.com/s/1ntAc6ql

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • lwqq007 2015-10-08 01:41
    已采纳

    哦,是我的curl_formadd没写好,添加CURLFORM_BUFFER来指定文件名就可以了。 if(curl_formadd(&post, &last,
    CURLFORM_COPYNAME, "sourcedata",
    CURLFORM_BUFFER, "test.bmp" ,
    CURLFORM_BUFFERPTR, imageData ,
    CURLFORM_BUFFERLENGTH, 102400,
    CURLFORM_END) != 0)
    {
    fprintf(stderr, "curl_formadd2 error.\n");
    goto out;
    }

    打赏 评论

相关推荐 更多相似问题