안녕하세요. 저는 주로 Android 개발자이며 http 프로토콜에 대해 매우 우둔합니다. 도움을 많이 주시면 도움이됩니다.Android Http Post to REST Api
API 호출을 시도하고 있습니다 : http://api.haikutest.com/developer/apidoc/assignments.html 여기서 장치에 파일을 POST합니다.
그들은 샘플 요청 수득 :
POST /api/assignments/3/submit
message[subject]=Subject+of+the+message&message[body]=Some+long+text&message[sent_at]=2013-07-05&message[draft]=0&message[assignment_id]=3&files[][file]=%23%3CFile%3A0x007ff59c9c1de8%3E&files[][filename]=test.pdf
및 설명 상태 파일 PARAM이 있음 : 파일명의 해시 베이스 64를 포함하는 각 요소와 파일
어레이 부호화 파일
이것은 내가 지금 시도하고있는 코드입니다 (참고 : Android 용 Robospice + Spring을 사용하고 있습니다) :
File file = new File(Environment.getExternalStorageDirectory() +
"/DCIM/Camera/1357279228432.jpg");
Base64InputStream stream = new Base64InputStream(new FileInputStream(file), 0);
HttpHeaders headers = new HttpHeaders();
headers.add("x-haiku-auth", HaikuAPI.getAuthHeader());
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("files[][file]", parts);
HttpEntity<Object> request = new HttpEntity<Object>(stream, headers);
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(
"https://" + HaikuAPI.getDomain() + "/api/assignments")
.pathSegment(assignmentID + "", "submit")
.queryParam("message[subject]", "Assignment Completed")
.queryParam("message[body]", message)
.queryParam("message[assignment_id]", assignmentID)
.queryParam("files[][filename]", "test.jpg");
URI url = builder.build().toUri();
String response = getRestTemplate().postForObject(url, request, String.class);
return response;
하지만 스트림을 JSON으로 직렬화 할 수 없다는 오류가 발생합니다. API 문서 다음에 스트림을 param으로 배치해야합니까? 또한 이것을 구현하는 올바른 방법은 무엇입니까? 나는 사용자에게 파일 크기 제한을 두지 않아도되므로 스트림을 사랑한다. Base64로 인코딩 된 작은 파일로 작업하고 직접 매개 변수로 사용할 수있게되었지만 ...
모든 도움을 주실 수 있습니다! 나는 확실히 작은 포인터에 대한 의견이나 답변을 downvote하지 않습니다.
는
업데이트 코드 업데이트,하지만 또 다른 오류 메시지가 얻을 : 당신이 Spring for Android
을 사용하고 같은
00:25:50.904 Thread-2066 An exception occurred during request network execution :Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/x-www-form-urlencoded]
내가 확실히 모르겠지만,이 서비스가 단순히 샘플 요청 @stefan 1 개 완전한 요청 –
을 보낼 것으로 예상 경우, 이상 파일을 스트리밍 할 수 있습니다 의심이있는 워드 파일을 가지고 있으며, PDF를 매우 짧습니다 ... 어떻게 그랬습니까? –