2013-08-27 2 views
0

Я пытаюсь загрузить несколько фотографий, сделанных приложением в удаленной базе данных. Для того, чтобы быть ясно:Отправьте снимок с сайта android на .net веб-приложение (чтобы сохранить его в базе данных)

  • Я беру piture из моего приложения
  • Я посылаю, если веб-сервис (Виттен в .net, SVC файл)
  • WS загрузить его в базе данных

путь я это делаю: я шлю байт [] восстанавливается из рисунка, способ

String url = MyAddress + "insert_img?login='" 
        + login_result + "'&epc='" + code + "'&title='" + t 
        + "'&image='" + base64EncodedString + "'&descrip='" + d 
        + "'"; 
      BufferedReader inStream = null; 
      System.out.println(url); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpR = new HttpGet(url); 
      httpR.setHeader("Accept", "application/json"); 
      httpR.setHeader("Content-type", "application/json"); 
      HttpResponse response = httpClient.execute(httpR); 

Моя проблема заключается в том, что я должен сжать МНОГО изображение, чтобы оно было отправлено. Картина, или поле base64EncodedString, создается так:

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 

mImageView.setImageDrawable(null); 
mImageView.setImageBitmap(thumbnail); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
thumbnail.compress(Bitmap.CompressFormat.JPEG, 1, baos); 

byte[] outputByteArray = baos.toByteArray(); 

base64EncodedString = Base64.encodeToString(outputByteArray, Base64.NO_WRAP + Base64.URL_SAFE); 

Как вы можете видеть, изображение очень очень очень сжаты, и когда я его восстановить это более или менее 4-х цветов штамп. И если я не сжимаю его много, изображение не вставлено. Итак, прежде всего: Я делаю это правильно? А также, почему нет вставки, когда изображение слишком велико и как, если возможно, отслеживать ошибку?

Спасибо!


EDIT:

Я изменил мой код таким образом, на стороне сервера:

public string insert_report(Stream stream) 
    { 
     string login = ""; 
     string epc = ""; 
     string title = ""; 
     string image = ""; 
     string descrip = ""; 
     MultipartParser parser = new MultipartParser(stream); 
     Entities entities = new Entities(); 
     string res = ""; 
     if (parser != null && parser.Success) 
     { 
      res += parser.Filename; 
      foreach (var content in parser.MyContents) 
      { 
       string name = content.PropertyName; 
       string str = Encoding.UTF8.GetString(content.Data); 
       res += "name : " + name +"---"; 
       res += "content : " + str+"---"; 

       if (name.Contains("login")) 
       { 
        login = str; 
       } 
       if (name.Contains("epc")) 
       { 
        epc = str; 
       } 
       if (name.Contains("title")) 
       { 
        title = str; 
       } 
       if (name.Contains("image")) 
       { 
        image = str; 
       } 
       if (name.Contains("descrip")) 
       { 
        descrip = str; 
       } 
      } 
     } 
     res+= " res returned by server : "+ entities.insert_report(login, epc, title, image, descrip); 
     entities.SaveChanges(); 
     return res; 
    } 

Но есть некоторые проблемы: функция insert_report возврат -1 ... Как восстановить ошибку, данную этой функцией?

ответ

2

Получаете ошибку 414 (Request-URI Too Long)? Вы должны использовать метод HTTP POST для загрузки изображений как тела POST - не требуется также кодировка Base64. Посмотрите на https://stackoverflow.com/a/7632849/2714032

+0

Я отредактировал свой вопрос, чтобы вы могли видеть обе стороны приложения. Я собираюсь работать с вами предложением, не изменяет ли что-либо для вызываемой функции WS-стороны? Благодаря ! – Derbie

+0

Да, часть WS также необходимо изменить, чтобы обрабатывать multipart/form-data - http://stackoverflow.com/a/7460231/2714032 – trebron

+0

Я обновил свой вопрос в соответствии с вашими соображениями, посмотрю :) (поскольку он не работает ...) – Derbie

 Смежные вопросы

  • Нет связанных вопросов^_^