Я пытаюсь загрузить несколько фотографий, сделанных приложением в удаленной базе данных. Для того, чтобы быть ясно:Отправьте снимок с сайта 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 ... Как восстановить ошибку, данную этой функцией?
Я отредактировал свой вопрос, чтобы вы могли видеть обе стороны приложения. Я собираюсь работать с вами предложением, не изменяет ли что-либо для вызываемой функции WS-стороны? Благодаря ! – Derbie
Да, часть WS также необходимо изменить, чтобы обрабатывать multipart/form-data - http://stackoverflow.com/a/7460231/2714032 – trebron
Я обновил свой вопрос в соответствии с вашими соображениями, посмотрю :) (поскольку он не работает ...) – Derbie