无法在PHP中使用API上传Teamwork文件

hrirmatl  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(99)

我正在使用以下链接https://developer.teamwork.com/projects/questions/fileUpload-preferred上传一个关于团队工作的文件
在这里,我使用PHP Codeigniter 4.x框架与CURL发送请求和响应的第一步,我得到的参考和URL两个值。即第一步是我的工作很好。
现在进行文档中提到的第二步,如下所示,
向上面的链接发送PUT请求,请求正文中包含“file”。除此之外,您还需要以下标题:
X-Amz-Acl:公开读取,内容长度:文件大小主机:从生成链接到主机
我正在传递文件对象
CodeIgniter\HTTP\Files\UploadedFile对象([路径:受保护] =〉/var/www/web 116/tmp/phpDyYgjj [原始名称:受保护] =〉横幅-01.png [名称:受保护] =〉横幅-01.png [原始MIME类型:受保护] =〉图像/png [错误:受保护] =〉0 [已移动:受保护] =〉[大小:受保护] =〉639542 [路径名称:拆分文件信息:私有] =〉/var/www/web 116/tmp/phpDyYgjj [文件名称:拆分文件信息:私有] =〉phpDyYgjj)
在请求正文中。
下面是我的代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url);   // $url is value which I have gotten after first step
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                        'X-Amz-Acl: public-read',
                        'Content-Length:' . $fileSize,    // size of file
                        'Host:  tw-bucket.s3.amazonaws.com'
                    ));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['file' => $file]));  // $file is file object which I have printed above
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

 $json = curl_exec($ch);
 $result = (array) json_decode($json);
 $result['http_code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 curl_close($ch);

但是在HTTP代码中,我得到的是403而不是200。
有人能帮我一下吗,这样我就可以上传团队合作的文件了?我正在为团队合作的特定任务上传一个文件。
谢谢

s1ag04yj

s1ag04yj1#

您可以找到另一个API来绕过这个问题,直到Teamwork API支持团队可以修复这个问题,下面是我为使这个工作所做的:
步骤1:使用API https://apidocs.teamwork.com/docs/teamwork/86ecebd6161af-file-uploading-via-the-api-classic
为此,您需要对POST/pendingFiles.json进行API调用。实际的文件内容通过名为“file”的表单字段发送。
如果成功,您将收到状态代码201(已创建)和包含参考代码的结构。{“pendingFile”:{“参考”:“tf_xxxxxxxxxxxxxx”} }
ref位是重要的部分,是挂起文件句柄。
步骤2:使用挂起文件句柄创建实际文件对象下一步是在Teamwork帐户的项目中创建实际文件对象。为此,您需要对POST /projects/{id}/files.json进行API调用,其中{id}是您要创建文件的项目。

{
“file”: {
  “description”: “Optional string describing the file”,
  “category-id”: “ID of the category you to create the file in. Pass 0 if no category”,
  “category-name”: “String if you want to create a new category – Pass category-id=0 also”,
  “pendingFileRef”: “tf_xxxxxxxxxxxxxxxx”
  }
}

如果要将文件附加到任务,请注意“fileId”而不是“pendingFileRef”。
与其他API不同,这不是挂起文件。

相关问题