douweng7083 2017-03-08 15:19
浏览 59
已采纳

Pivotal Tracker API文件上传

I've got this form to upload a file. I want it to be uploaded as a comment in Pivotal Tracker with the API. What will I write in the code? I'm new to Curl.

Edit: In Pivotal Tracker you can upload file .jpg, .xls, etc in the comments, and it creates an downloadable icon/thumbnail.

Comments Doc: https://www.pivotaltracker.com/help/api/rest/v5#projects_project_id_stories_story_id_comments_post

File attachment Doc: https://www.pivotaltracker.com/help/api/rest/v5#file_attachment_resource

upload.html:

<form action="pt.php" method="post" enctype="multipart/form-data">
  <fieldset>
    <input type="file" name="pt_xls" />
    <input type="submit" name="upload" value="Upload" />
  </fieldset>
</form>

pt.php:

$response = pivotalTracker("https://www.pivotaltracker.com/services/v5/projects/XXXXXXXX/stories/XXXXXXXX/comments");

$resArr = array();
$resArr = json_decode($response);

echo "<pre>"; print_r($resArr); echo "</pre>";

function pivotalTracker($url) {


    $pivotalAPIToken = 'XXXXXXXXXX'; 
    $curlHeader = array("X-TrackerToken: ".$pivotalAPIToken, "Content-type: application/json");

    $options = array(
        CURLOPT_HTTPHEADER => $curlHeader,
        CURLOPT_RETURNTRANSFER => true,  
        CURLOPT_POST => TRUE,
        CURLOPT_POSTFIELDS => json_encode($data),
    ); 

    $ch = curl_init($url);
    curl_setopt_array($ch, $options);

    $content  = curl_exec($ch);

    curl_close($ch);

    return $content;
}
  • 写回答

1条回答 默认 最新

  • douzen1896 2017-03-13 16:11
    关注

    This may not be the right way, but it works!

    file_in.php

        if(isset($_FILES['file'])){
              $errors= array();
              $theFile = $_FILES['file'];
              $file_name = $_FILES['file']['name'];
              $file_size = $_FILES['file']['size'];
              $file_tmp = $_FILES['file']['tmp_name'];
              $file_type = $_FILES['file']['type'];
    
              move_uploaded_file($file_tmp, $_SERVER['DOCUMENT_ROOT']."/pt_uploads/".$file_name);
    
           }
    
            $target_file = $_SERVER['DOCUMENT_ROOT']."/pt_uploads/".$file_name;
            $response = pivotalTracker("https://www.pivotaltracker.com/services/v5/projects/*ID*/uploads", $file_name, $target_file, $file_type);
    
    
            function pivotalTracker($url, $file_name, $target_file, $file_type) {
    
                $pivotalAPIToken = 'XXXXXXXX';
                $curlHeader = array("X-TrackerToken: ".$pivotalAPIToken, "Content-type: multipart/form-data", "Content-Disposition: form-data;'");
    
    
                $cfile = curl_file_create('../pt_uploads/'.$file_name,$file_type,$file_name);
    
                $data = array('file' => $cfile);
    
                $options = array(
                    CURLOPT_HTTPHEADER => $curlHeader,
                    CURLOPT_RETURNTRANSFER => true,  
                    CURLOPT_BINARYTRANSFER => true,
                    CURLOPT_POST => TRUE,
                    CURLOPT_POSTFIELDS => $data,
                ); 
    
                $ch = curl_init($url);
                curl_setopt_array($ch, $options);
    
                $content  = curl_exec($ch);
    
                curl_close($ch);
    
                unlink($target_file);
    
                $resArr = array();
                $resArr = json_decode($content);
                $theId = $resArr->id;
                $theName = $resArr->filename;
    
    
                header('Location: pt_file_comment.php?pt_file_id='.$theId.'&filename='.$theName);
    
        }
    

    pt_file_comment.php

    $pt_file_id = $_GET['pt_file_id'];
        $pt_file_name = $_GET['filename'];
    
        $response = pivotalTracker("https://www.pivotaltracker.com/services/v5/projects/*ID*/stories/*ID*/comments", $pt_file_id, $pt_file_name);
        $resArr = array();
        $resArr = json_decode($response);
    
        echo "<pre>"; print_r($resArr); echo "</pre>";
    
        function pivotalTracker($url, $pt_file_id, $pt_file_name) {
    
        $file_data[] = array('id' => $pt_file_id,);
        $fileObject = (object) $file_data;
    
    
            $data = array(
                'text'              =>    'file_attachments/'.$pt_file_id.'/'.$pt_file_name,
                'file_attachments'  => $file_data,
            );
    
            $pivotalAPIToken = 'XXXX';
            $curlHeader = array("X-TrackerToken: ".$pivotalAPIToken, "Content-type: application/json");
    
            $options = array(
                CURLOPT_HTTPHEADER => $curlHeader,
                CURLOPT_RETURNTRANSFER => true,  
                CURLOPT_POST => TRUE,
                CURLOPT_POSTFIELDS => json_encode($data),
            ); 
    
            $ch = curl_init($url);
            curl_setopt_array($ch, $options);
    
            $content  = curl_exec($ch);
    
            curl_close($ch);
            return $content;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?