Я использую API Jira для добавления файла вложения в дело. Моя проблема — после того, как мой код прикрепил файл, и я иду к делу JIRA, чтобы подтвердить, я вижу две вещи. Во-первых, если это изображение, я могу увидеть эскиз изображения. Однако, если я нажимаю на нее, я получаю сообщение об ошибке: «Запрошенный контент не может быть загружен. Пожалуйста, попробуйте еще раз». Во-вторых, под миниатюрой вместо того, чтобы показывать имя файла, он имеет путь, из которого файл был изначально загружен (id: c: / wamp / www / …. «. Есть ли причина, по которой это происходит? Здесь мой код:
$ch = curl_init();
$header = array(
'Content-Type: multipart/form-data',
'X-Atlassian-Token: no-check'
);
$attachmentPath = $this->get_file_uploads();
//$attachmentPath comes out to be something like:
//c:/wamp/www/mySite/web/system/files/my_folder/DSC_0344_3.JPG
$data = array('file'=>"@". $attachmentPath, 'filename'=>'DSC_0344_3.JPG');
$url= 'https://mysite.atlassian.net/rest/api/2/issue/20612/attachments/';
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS ,$data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");
$result = curl_exec($ch);
$ch_error = curl_error($ch);
После добавления файла в Jira, когда я вхожу в jira, я вижу миниатюру, но заголовок под файлом выглядит примерно так: c: /wamp/www/mySite/web/system/files/my_folder/DSC_0344_3.JPG имени файла.
Спасибо
Вам необходимо использовать:
$data = array('file'=>"@". $attachmentPath . ';filename=DSC_0344_3.JPG');
Это проблема в PHP CURL <5.5.0, но> 5.2.10, см. Имена вложений JIRA API содержат полный путь к опубликованным файлам
При использовании PHP> = 5.5.0 лучше переключиться на CURLFile
подход, как также описано в этой ссылке.
$cfile = new CURLFile($attachmentPath);
$cfile->setPostFilename('DSC_0344_3.JPG');
$data = array('file'=>$cfile);
Для любого в будущем: вот функция, которую я написал, которая работает на PHP 7
function attachFileToIssue($issueURL, $attachmentURL) {
// issueURL will be something like this: http://{yourdomainforjira}.com/rest/api/2/issue/{key}/attachments
// $attachmentURL will be real path to file (i.e. C:\hereswheremyfilelives\fileName.jpg) NOTE: Local paths ("./fileName.jpg") does not work!
$ch = curl_init();
$headers = array(
'X-Atlassian-Token: nocheck',
'Content-type: multipart/form-data'
);
$cfile = new CURLFile($attachmentURL);
$cfile->setPostFilename(basename($attachmentURL));
$data = array("file" => $cfile);
curl_setopt_array(
$ch,
array(
CURLOPT_URL => $issueURL,
CURLOPT_VERBOSE => 1,
CURLOPT_POSTFIELDS => $data,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_USERPWD => "{username}:{password}")
);
$result = curl_exec($ch);
$ch_error = curl_error($ch);
if ($ch_error)
echo "cURL Error: " . $ch_error;
curl_close($ch);
}