アプリケーションで撮影した写真を離れたデータベースにアップロードしようとしています。明確にするために:
- アプリから写真を撮る
- ifをWebサービスに送信します(.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 色のスタンプになります。また、あまり圧縮しないと画像が挿入されません。まず第一に、私は正しい方法で対処していますか? また、画像が大きすぎる場合に挿入されないのはなぜですか。可能であれば、エラーを追跡するにはどうすればよいですか?
ありがとう !
編集 :
サーバー側でコードをそのように変更しました:
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 を返します... その関数によって与えられたエラーを回復するにはどうすればよいですか?