2013-08-15 6 views
2

Из моего андроида я пытаюсь отправить изображение с классом данных в веб-сервис IIS. (C#)Отправить изображение в Json: 400 Bad request

Проблема в том, что я получаю 400 Bad request.

Изображение в кодировке Base64. А затем помещается в json с остальными элементами класса.

Я предполагаю, что Base64 недействителен внутри Json. Поэтому сервер этого не понимает. Если я установил строку "", сообщение принимается в порядке.

Вопрос в том, Как мне сделать мой Base64 действительным из массива Json? (Я пробовал URL.Encode без успеха).

or Как отправить изображение с android на webservice?

Gson gson = new Gson(); 

String json = gson.toJson(record); // record has param { String base64Photo } 

ответ

1

Какое значение имеет изображение? Я уверен, что вы превосходите предел размера IIS Json (по умолчанию почти 4 МБ).

Проверить эту http://geekswithblogs.net/frankw/archive/2008/08/05/how-to-configure-maxjsonlength-in-asp.net-ajax-applications.aspx или это http://www.webtrenches.com/post.cfm/iis7-file-upload-size-limits

Удачи!

+0

Его что-то рассмотреть, однако я только что снял фотографию и ее единственный 81.5KB. Поскольку это в формате Jpg, а не в Bitmap. Добавил предлагаемый код в любом случае, все еще та же проблема. – Doomsknight

+0

С некоторыми дополнительными ограничениями по размеру, включая размер строки и буфера, он действительно помог исправить мою проблему. Что-то, что я уже делал в предыдущих проектах. Так что спасибо! '<Связывание имя = "отдых" MaxBufferSize = "1024000" MaxReceivedMessageSize = "1024000" crossDomainScriptAccessEnabled = "истина"> ' – Doomsknight

1

Я буду честен - я никогда не загружал изображение с Android на веб-сервис IIS, но в любом другом контексте я всегда использовал File. Легко создать файл и загрузить его как MultipartEntity. Кроме того, вы избегаете использования Base64 вместе, что хорошо, потому что это экономит вам примерно на 33% увеличенных накладных расходов, которые поставляются с использованием Base64.

private File createFileFromBm(Bitmap pic){ 
    File f = new File(context.getCacheDir(), "image"); 

    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    pic.compress(CompressFormat.JPEG, 100, bos); 
    byte[] data = bos.toByteArray(); 

    try{ 
     FileOutputStream fos = new FileOutputStream(f); 
     fos.write(data); 
     fos.close(); 
    } catch (IOException e){ 
     Log.e(TAG, e.toString()); 
    } 

    return f; 
} 

Вот как создать MultipartEntity

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE;    
entity.addPart("photo", new FileBody(file, "image/jpeg")); 
httpPost.setEntity(entity); 
return httpClient.execute(httpPost, responseHandler); 

Я использовал HttpPost Вот и BasicResponseHandler получить JSON выход с сервера для обработки, но вы можете делать все, что вам нравится.

+0

Хорошо, если бы у меня был FileBody как часть моего класса, как бы сервер представлял это? Просто используйте параметр типа «Файл»? – Doomsknight

+0

Если да, то да. Когда я делаю это с помощью PHP, есть только входящий массив файлов, который принимает такой вид ввода. Я предполагаю, что это в IIS, но я действительно не знаю. – Rarw