Я пытаюсь POST
преобразовать изображение в imageshack, используя их API и объект WSRequest Play Framework.
Мой код выглядит следующим образом:
public static void upload( Picture picture ) throws Exception {
//set file parameter - in this case the image
WS.FileParam fp = new WS.FileParam( picture.asFile, "fileupload");
//set other parameters
Map<String,Object> params = new HashMap<String, Object>();
params.put( "optsize", "resample" );
params.put( "rembar", "yes" );
params.put( "public", "no" );
params.put( "a_username", username );
params.put( "a_password", password );
params.put( "key", a_key );
//POST request
Document doc = WS.url( "http://www.imageshack.us/upload_api.php" )
.setHeader( "Content-Type", picture.contentType )
.mimeType( "multipart/form-data" )
.params( params )
.files( fp )
.post()
.getXml();
}
Однако я всегда получаю следующий ответ от imageshack:
Извините, но мы обнаружили, что получены неожиданные данные. Обязательный параметр 'fileupload' отсутствует или ваше сообщение не является multipart / form-data.
Я попытался отправить файл в качестве параметра, используя байтовый массив:
params.put( "fileupload", Base64.encode( picture.asBytes ) )
Но это также приводит к тому же ответу от Imageshack.
Это сводит меня с ума. Может кто-нибудь указать, где я иду не так или, возможно, указать мне в направлении лучшего решения? Спасибо.
<Ч />
причина
После небольшого исследования я обнаружил, что я упустил немного важной информации из этого вопроса ... Я включаю модуль Google App Engine в свое приложение.
Согласно Google Framework от Google Framework код, связанный с присоединением файлов к запросу WS при использовании GAE, фактически закомментирован. Следовательно, причина, по которой это просто не работает. Так что вам не выдадут ошибки и никаких указаний на то, что это не сработает ... вам просто нужно разобраться с этим.
Я принял ответ @ Gary, поскольку это правильный способ загрузки изображения в imageshack с помощью WS - только не при использовании GAE.