Сначала я считаю, что вы должны позвонить io.flush()
, а затем io.close()
после написания изображения.
Второй тип контента мне кажется странным. Кажется, что вы пытаетесь отправить форму, в то время как это на самом деле изображение. Я не знаю, чего ожидает ваш asp, но обычно, когда я пишу код, который должен передавать файл по HTTP, я отправляю соответствующий тип контента, например, image/jpeg
.
Вот, например, фрагмент кода, который я извлек из одной небольшой утилиты, которую я написал и использую во время моей текущей работы:
URL url = new URL("http://localhost:8080/handler");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "image/jpeg");
con.setRequestMethod("POST");
InputStream in = new FileInputStream("c:/temp/poc/img/mytest2.jpg");
OutputStream out = con.getOutputStream();
copy(in, con.getOutputStream());
out.flush();
out.close();
BufferedReader r = new BufferedReader(new InputStreamReader(con.getInputStream()));
// obviously it is not required to print the response. But you have
// to call con.getInputStream(). The connection is really established only
// when getInputStream() is called.
System.out.println("Output:");
for (String line = r.readLine(); line != null; line = r.readLine()) {
System.out.println(line);
}
Я использовал здесь метод copy (), который я взял из утилиты ввода-вывода Jakarta. Вот код для справки:
protected static long copy(InputStream input, OutputStream output)
throws IOException {
byte[] buffer = new byte[12288]; // 12K
long count = 0L;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
Очевидно, что сторона сервера должна быть готова к считыванию содержимого изображения непосредственно из тела POST.
Надеюсь, это поможет.