通过jquery $ .post()和php发送原始多部分数据

时间:2010-12-07 02:18:42

标签: php file-upload jquery curl multipart

我需要使用php POST发送原始多部分数据但没有html表单...我用jquery $ .post()启动进程(目的是更改Twitter帐户的背景)。

我怎样才能实现这一目标?这是我目前(但仍然不完整)的代码:

1)图像文件名插入此隐藏的输入字段:

<input type="hidden" id="profile_background_image_url" value="oats.jpg" />

2)点击提交按钮时,会触发一个javascript函数...并调用:

$.post('helper.php',{
 profile_background_image_url:$('#profile_background_image_url').val()
});

3) helper.php

$param = array();
$param['image'] = '/www/uploads/'.$_POST['profile_use_background_image'];
$status = $connection->post('account/update_profile_background_image',$param);

备注

  1. 所有后台文件都在 / www / uploads 本地目录中。
  2. 我正在使用Abraham Williams的twitteroauth library 0.2
  3. 底线,在第三步中,我需要将原始多部分数据中的 $ param ['image'] 发送到 $ connection 对象(推特图书馆)。

    有什么想法吗?

    一些参考文献:http://dev.twitter.com/doc/post/account/update_profile_background_image

2 个答案:

答案 0 :(得分:1)

是的,我现在看到他将post字段数组构建为查询字符串,这意味着您必须手动设置内容类型,并且@字段中的image键不会发挥其魔力只适用于数组参数。更重要的是,我没有看到一种方法来修改标题而不破坏库或扩展它并替换某些功能。


我会尝试将@添加到image param的文件路径中,如:

$param['image'] = '@/www/uploads/'.$_POST['profile_use_background_image'];

这是使用cURL执行此操作的便捷方式,看起来libray基本上使用cURL来发出请求,因此应该可以正常工作。

答案 1 :(得分:0)

解决!

curl_setopt($ci, CURLOPT_POST, TRUE);
        if(is_array($files)){
          $post_file_array = array();
          foreach($files as $key=>$value){
             $post_file_array[$key] = "@{$value}";
          }
          curl_setopt($ci, CURLOPT_POSTFIELDS, $post_file_array);
          if (!empty($postfields)) {
            $url = "{$url}?{$postfields}";
          }
        }
        else if (!empty($postfields)) {
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
        }