以下のコード
OutputStream outputWeb = conn.getOutputStream();
File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);
InputStream inputWeb = conn.getInputStream();
while((ch=inputFile.read()) >= 0) {
outputWeb.write(ch);
}
IOException
接続から InputStream が取得された行で、「サーバーが HTTP 応答コードを返しました: URL: myurl に対して 500 を返しました」というメッセージが表示されます。
以下のコードは例外を引き起こさず、正常に動作しますが
OutputStream outputWeb = conn.getOutputStream();
File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);
while((ch=inputFile.read()) >= 0) {
outputWeb.write(ch);
}
InputStream inputWeb = conn.getInputStream();
唯一の違いは、接続への書き込みの後にある入力ストリームを取得することです。
API契約からこれをどのように推測できますか? 何が起こっているのか、その理由は?
接続構成
URL url = new URL("https://myurl");
HttpURLConnection conn;
// creating http connection
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-type", "audio....");
アップデート
これで原理的には明確になりましたが、API コントラクトでこれを見たいと思っています。つまり、何かを書き込むまで入力ストリームを生成できないことをどこかに書く必要があります。実装では、そのストリームのリーダーに待機を義務付けるだけで、どのような場合でもこれを許可できます。