-2

イメージをアップロードするために C# で REST サービスを実装しました。

[OperationContract]
[WebInvoke(Method = "PUT", UriTemplate = "add/{idAlbum}/{name}/image")]
void Add(string idAlbum, string name, Stream image);

C#クライアントで使用することに成功しました:

byte[] image = lireFichier(@"C:\Users\user\Pictures\asap2.jpeg");
WebClient client = new WebClient();
client.Headers.Add("Content-Type", "image/jpeg");
var results = client.UploadData("http://localhost:1767/ImageService.svc/add/1/REST/image", "PUT", image);

だから今、私はこのようなJavaクライアント(アンドロイド)でそれを使用したい(動作しません):

HttpURLConnection conn = ( HttpURLConnection ) new URL( "http://localhost:1767/ImageService.svc/add/1/RESTjava/image" ).openConnection();  

conn.setRequestMethod("PUT");

conn.setDoOutput( true );
conn.connect(); 

OutputStream out = conn.getOutputStream();  

Bitmap img = ((BitmapDrawable)getResources().getDrawable(R.drawable.entourage)).getBitmap();
ByteArrayOutputStream bao = new ByteArrayOutputStream();
img.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte[] data = bao.toByteArray();
out.write(data);

エラーはありませんが、これは機能しませんでした。例外なく。

 06-05 14:11:57.736: I/ASAP PICS(746): onPreExecute
 06-05 14:11:57.745: I/ASAP PICS(746): doInBackground
 06-05 14:11:57.816: I/System.out(746): 405
 06-05 14:44:26.245: D/dalvikvm(971): GC freed 238 objects / 332400 bytes in 34ms
 06-05 14:11:57.905: I/ASAP PICS(746): onPostExecute
4

3 に答える 3

0

私/System.out(746): 405

HTTP 405 = メソッドは許可されていません。

認証を追加する必要があると思いますか?

于 2013-06-05T12:14:52.567 に答える
0

:で行う必要がありflushます。これが答えです。OutputStreamout.flush();

于 2013-06-05T11:55:44.217 に答える
0

私は解決策を見つけました!

まず、REST サービスを POST メソッドに入れます。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "add/{idAlbum}/{name}")]
void Add(string idAlbum, string name, Stream image);

そして最後に Java クライアント:

HttpPost post = new HttpPost("http://localhost:1767/ImageService.svc/add/1/RESTjava");

Bitmap img = ((BitmapDrawable)getResources().getDrawable(R.drawable.entourage)).getBitmap();
ByteArrayOutputStream bao = new ByteArrayOutputStream();
img.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte[] data = bao.toByteArray();

ByteArrayEntity bimg = new ByteArrayEntity(data);
post.setEntity(bimg);
new DefaultHttpClient().execute(post);
于 2013-06-07T09:09:17.850 に答える