Java: Как загрузить файл на сервер WebDAV из сервлета? - PullRequest
7 голосов
/ 14 февраля 2010

мое приложение ajax загружает файл в контейнер приложения Java из браузера пользователя. Я хотел бы сделать следующее: после завершения загрузки я хочу «отправить» файл на сервер WebDAV, идентифицируемый по имени хоста (т.е. localhost), порту (т.е. 8080) и месту, где я хочу сохранить файл (т.е. dir1 / dir2).

Что мне нужно, так это в основном клиентская среда WebDAV, которая позволяет мне загружать файл в WebDAV. В моем приложении я уже использую "webdavclient4j", но, похоже, я не могу найти способ загрузить файл с ним?

Есть идеи? Заранее благодарим за любую помощь, которую вы можете оказать.

F

Ответы [ 2 ]

12 голосов
/ 17 февраля 2010

Вы можете сделать это с помощью всего нескольких строк кода, используя мой недавно выпущенный и очень простой в использовании современный клиент webdav для Java, Sardine. Вот пара примеров (первый использует commons-io для чтения файла):

Sardine sardine = SardineFactory.begin("username", "password");
byte[] data = FileUtils.readFileToByteArray(new File("/file/on/disk"));
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", data);

или используя потоки:

Sardine sardine = SardineFactory.begin("username", "password");
InputStream fis = new FileInputStream(new File("/some/file/on/disk.txt"));
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", fis);

https://github.com/lookfirst/sardine

ура

джон

7 голосов
/ 14 февраля 2010

Вы можете использовать библиотеку Jackrabbit WebDAV .

Пример клиента WebDAV для загрузки контента на сервер WebDAV (взят из здесь ):

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.jackrabbit.webdav.client.methods.PutMethod;

...

// WebDAV URL:
final String baseUrl = ...;
// Source file to upload:
File f = ...;
try{
    HttpClient client = new HttpClient();
    Credentials creds = new UsernamePasswordCredentials("username", "password");
    client.getState().setCredentials(AuthScope.ANY, creds);

    PutMethod method = new PutMethod(baseUrl + "/" + f.getName());
    RequestEntity requestEntity = new InputStreamRequestEntity(
        new FileInputStream(f));
    method.setRequestEntity(requestEntity);
    client.executeMethod(method);
    System.out.println(method.getStatusCode() + " " + method.getStatusText());
}
catch(HttpException ex){
    // Handle Exception
}
catch(IOException ex){
    // Handle Exception
}
...