Я хотел бы загрузить файлы из java-приложения/апплета, используя событие POST http. Я хотел бы избежать использования какой-либо библиотеки, не включенной в SE, если нет другого (выполнимого) варианта.
Пока я придумал только очень простое решение.
– Создайте строку (буфер) и заполните ее совместимым заголовком (http://www.ietf.org/rfc/rfc1867.txt)
— открыть соединение с сервером URL.openConnection() и записать содержимое этого файла в OutputStream.
Мне также нужно вручную преобразовать двоичный файл в событие POST.
Я надеюсь, что есть лучший, более простой способ сделать это?
как (просто) сгенерировать HTTP-запрос POST из java для загрузки файла
comment
Пожалуйста, объясните, почему вы не хотите использовать внешнюю библиотеку. Очевидно, что это возможно без каких-либо внешних библиотек, но в основном вы будете дублировать работу (скажем) HttpClient (http://hc.apache.org/httpcomponents-client/index.html)
- person Jon Skeet   schedule 24.11.2008
comment
Я предполагаю, что он хочет избежать использования библиотеки, чтобы уменьшить размер апплета, сократив время загрузки.
- person Serxipc   schedule 24.11.2008
Ответы (2)
Вам нужно использовать классы java.net.URL
и java.net.URLConnection
.
Несколько хороших примеров можно найти на странице http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html
Вот какой-то быстрый и неприятный код:
public void post(String url) throws Exception {
URL u = new URL(url);
URLConnection c = u.openConnection();
c.setDoOutput(true);
if (c instanceof HttpURLConnection) {
((HttpURLConnection)c).setRequestMethod("POST");
}
OutputStreamWriter out = new OutputStreamWriter(
c.getOutputStream());
// output your data here
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
c.getInputStream()));
String s = null;
while ((s = in.readLine()) != null) {
System.out.println(s);
}
in.close();
}
Обратите внимание, что вам все еще может понадобиться urlencode() ваших данных POST, прежде чем записывать их в соединение.
person
Alnitak
schedule
27.11.2008
Вам нужно узнать о кодировании с фрагментами, используемом в более новых версиях HTTP. Библиотека Apache HttpClient является хорошей эталонной реализацией для изучения.
person
Josh
schedule
24.11.2008