Я пытаюсь использовать Scribe для загрузки файла GPX (не сжатого) в Strava, используя их API V3 (с Java, в Google App Engine):
String url = "https://www.strava.com/api/v3/uploads?access_token=<TOKEN>";
OAuthRequest req = new OAuthRequest(Verb.POST, url);
req.addQuerystringParameter("private", "1");
req.addQuerystringParameter("activity_type", "bike");
req.addQuerystringParameter("data_type", "gpx");
req.addQuerystringParameter("external_id", <Unique String>);
req.addHeader("Content-Type", "multipart/form-data");
String gpx = <Content of GPX file to Upload>;
req.addBodyParameter("file", gpx);
Response response = request.send();
В результате я получаю код ответа 500 (внутренняя ошибка) от Strava, и он не загружает активность GPX.
Я предполагаю, что это проблема, связанная с тем, как я формирую составной HTTP POST, который определен в документации Strava здесь как:
DEFINITION
POST https://www.strava.com/api/v3/uploads
EXAMPLE REQUEST
$ curl -X POST https://www.strava.com/api/v3/uploads \
-F access_token=83ebeabdec09f6670863766f792ead24d61fe3f9 \
-F activity_type=ride \
-F [email protected] \
-F data_type=fit
Parameters:
<OTHERS>
file: multipart/form-data required
the actual activity data, if gzipped the data_type must end with .gz
Любые идеи о том, как я могу сделать эту работу, пожалуйста? Спасибо.
РЕДАКТИРОВАТЬ: Обнаружил несколько вещей в ходе моих собственных дальнейших исследований:
- Scribe — это просто подписание oauth, поэтому автор не сосредотачивается на добавлении функциональности для обработки multipart/form-data (хотя люди предлагали такие дополнения)
- Я мог бы использовать один из классов Apache (MultipartEntity) для этого со Scribe, за исключением того, что я думаю, что библиотека Apache не поддерживается в Google App Engine. См. эту ветку, которая быть идеальным, за исключением проблемы с Apache/GAE