我正在使用以下链接上传一个关于团队工作的文件https://developer.teamwork.com/projects/questions/fileUpload-preferred
在这里,我使用带有CURL的PHP Codeigniter 4.x框架来发送请求,作为对第一步的响应,我得到了Ref和URL这两个值。第一步对我来说很好。
现在,对于下面文档中提到的第二步,
向上面的链接发送一个PUT请求,请求正文中包含"file"。除此之外,您还需要以下标题:
X-Amz-Acl:公共读取,内容长度:文件大小主机:主机从生成链接
我正在传递文件对象
CodeIgniter\HTTP\Files\UploadedFile对象([path:protected]=>/var/www/web116/tmp/phpDyYgj[originalName:protected]=>banner-01.png[名称:protected]=>横幅-01.png[originalMimeType:protected]=>image/png[error:protected]=>0[hasMoved:protected]=>[size:protected]=>639542[pathName:SplFileInfo:private]=>var/www/web116/tmp/phpDyYgjj[fileName:SplFileInfo:private]=>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。
有人能帮我吗?这样我就可以上传团队合作的文件了?我正在为团队合作的特定任务上传一个文件。
感谢
您可以找到另一个API来绕过此问题,直到团队API支持团队能够解决此问题,以下是我为实现此目标所做的:
步骤1:使用APIhttps://apidocs.teamwork.com/docs/teamwork/86ecebd6161af-file-uploading-via-the-api-classic
为此,您对POST/pendingFiles.json进行API调用。实际文件内容通过一个名为"file"的表单字段发送。
如果成功,您将收到一个状态代码201(已创建(和一个包含参考代码的结构。{"pendingFile":{"ref":"tf_xxxxxxxxxxx"}}
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那样是一个挂起的文件。