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

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;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀