1

以下のコード

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 コントラクトでこれを見たいと思っています。つまり、何かを書き込むまで入力ストリームを生成できないことをどこかに書く必要があります。実装では、そのストリームのリーダーに待機を義務付けるだけで、どのような場合でもこれを許可できます。

4

0 に答える 0