Конечно, можно использовать что-то более универсальное, более высокоуровневое типа Apache Jackrabbit, хотя стоит отметить, что я его только посмотрел - и годится ли он для данной задачи не скажу - может и ошибся.
Постановка задачи предельна проста - залить поток и внутренее желание - обойтись стандартным набором JDK.
Чуть поковырявшись - оказалось более-менее просто:
// targetUrl - полный url целевого файла на сервере
final HttpURLConnection сonnection = (HttpURLConnection) targetURL.openConnection();
final String userPassword = username + ":" + password;
final String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
// Аутентификация
connection.setRequestProperty("Authorization", "Basic " + encoding);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setAllowUserInteraction(false);
// Метод закачки данных - обязательно PUT
connection.setRequestMethod("PUT");
final OutputStream out = new BufferedOutputStream(connection.getOutputStream());
// пишем в out всё, что необходимо
out.flush();
out.close();
// обязательно необходимо прочитать ответ
final InputStream is = pdfConnection.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
final StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
connection.disconnect();
Если такой файл уже существовал на сервере он будет просто перетёрт.
2 комментария:
А если NTLM нужен? и другие виды аутентификации?
2jnsd: если NTML или другие виды аутентификации нужны - то стоит смотреть в сторону чего-то более унифицированного, возможно тот же Jackrabbit. Здесь вообще произошёл финт ушами - обычный HTTP put запрос сработал для WebDAV'а
Отправить комментарий