안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2013년 3월 14일 목요일

[LibCurl] Rest API의 Attachments 필드에 파일 업데이트하기

http://docs.atlassian.com/jira/REST/latest/#id125223

해당 REST API 중

/rest/api/2/issue/{issueIdOrKey}/attachments

위 명령어가 attachments 에 파일을 올리는 URL 입니다.

그리고, 해당 URL을 사용하여 파일으 업데이트 하는 curl 소스는

curl -D- -u admin:admin -X POST -H "X-Atlassian-Token: nocheck" -F "file=@myfile.txt" http://myhost/rest/api/2/issue/TEST-123/attachments

이며, 위 코드의 각 옵션들을 llibCurl로 변경하면 소스 코드는 완성 됩니다.

-u 즉, User Admin 하는 코드는 CURLOPT_USERPWD 옵션을 사용하면 되고,

-X는 Post, Get 등 전송 방식을 선택하는 것이고, Post 방식임으로

CURLOPT_HTTPPOST 방식을 사용하면 됩니다.

-H 는 User가 정한 Header를 넣는 코드로

CURLOPT_HTTPHEADER 를 사용하면 됩니다.

자세한 사용 방법은 각 Option 을 구글링하면 나오게 됩니다.

그리고, -F는 파일을 업로드 하는 것으로 해당 포스팅이 되겠습니다.

한참 해맸던 문제는 코드 에러가 발생하지 않는데, 전송이 되지 않는 것이었습니다.

/* Fill in the file upload field */
 curl_formadd(&formpost,
  &lastptr,
  CURLFORM_COPYNAME, "file",
  CURLFORM_FILE, "abcd.jpg",
  CURLFORM_END);

해당 코드가, 파일 업로드를 하는 필드입니다.

위 방식으로 하면 되는데, 이 때 주의점이

CURLFORM_COPYNAME 필드의 "file" 즉, 이 file 이

curl 명령어의 ""file = @myfile.txt"" 의 file 즉, filename 필드명을 적어 줘야 합니다.

COPYNAME 필드를 file이 아닌 다른 이름으로적으면 filename field를 찾지 못해

파일 전송이 되지 않는 것입니다.

참조 : http://parangbook.tistory.com/193 => filename file와 COPYNAME field 이름 통일을 알게 해준사이트

http://cboard.cprogramming.com/networking-device-communication/76842-file-upload-libcurl.html

=> file 전송에 대한 예시가 있는 사이트