Как просмотреть файловую систему серверного компьютера при соединении с клиентом (Java) - PullRequest
1 голос
/ 08 августа 2011

Я нахожусь в процессе создания концепции для отделения бизнес-кода от графического интерфейса для медиа-сервера PS3 (http://www.ps3mediaserver.org/). Для этого у меня есть проект, размещенный в Source Forge (http://sourceforge.net/projects/pms-remote/). Клиентдолжен быть простым интерфейсом для настройки сервера из любого места в сети, имеющего права на подключение к серверу.

На стороне сервера все службы были открыты с использованием javax.jws, а клиентский прокси имеетбыло сгенерировано с помощью wsimport.

Одна из функций текущих функций (фактически единственная блокирующая) заключается в определении папок, которые будут совместно использоваться сервером. Поскольку клиент и сервер теперь работают какодиночное приложение на том же компьютере, тривиально просматривать его файловую систему.

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

Я думал, что найду библиотеку, предоставляющую мне эту функциональность, но не смог ее найти.Просмотр файлов с использованием пути UNC и доступ к удаленному компьютеру не представляется возможным, так как он не будет прозрачным для пользователя.

Пока я не хочу беспокоиться о проблемах безопасности, я 'Я разберусь с этим, когда все остальное станет возможным.

Буду благодарен за любой вклад.Спасибо, Филипп

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Я закончил тем, что создал довольно простой веб-сервис, позволяющий либо перечислить все корневые папки, либо все дочерние папки по заданному пути. Теперь клиент должен иметь (GUI) браузер для доступа к этой службе.

package net.pms.plugin.webservice.filesystem;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import net.pms.plugin.webservice.ServiceBase;

@WebService(serviceName = "FileSystem", targetNamespace = "http://ps3mediaserver.org/filesystem")
public class FileSystemWebService extends ServiceBase {

    @WebMethod()
    public List<String> getRoots() {
        List<String> roots = new ArrayList<String>();
        for(File child : File.listRoots()) {
            roots.add(child.getAbsolutePath());
        }
        return roots;
    }

    @WebMethod()
    public List<String> getChildFolders(@WebParam(name="folderPath") String folderPath) throws FileNotFoundException {
        List<String> children = new ArrayList<String>();
        File d = new File(folderPath);
        if(d.isDirectory()) {
            for(File child : d.listFiles()) {
                if(child.isDirectory() && !child.isHidden()) {
                    children.add(child.getAbsolutePath());
                }
            }
        } else {
            throw new FileNotFoundException();
        }
        return children;
    }
}

Для тех, кто хочет использовать это, вот класс ServiceBase

package net.pms.plugin.webservice;

import javax.xml.ws.Endpoint;

import org.apache.log4j.Logger;

public abstract class ServiceBase {
    private static final Logger log = Logger.getLogger(ServiceBase.class);
    protected boolean isInitialized;

    /**
     * the published endpoint
     */
    private Endpoint endpoint = null;

    /**
     * 
     * Start to listen for remote requests
     * 
     * @param host ip or host name
     * @param port port to use
     * @param path name of the web service
     */
    public void bind(String host, int port, String path) {
        String endpointURL = "http://" + host + ":" + port + "/" + path;
        try {
            endpoint = Endpoint.publish(endpointURL, this);
            isInitialized = true;
            log.info("Sucessfully bound enpoint: " + endpointURL);
        } catch (Exception e) {
            log.error("Failed to bind enpoint: " + endpointURL, e);
        }
    }

    /**
     * Stop the webservice
     */
    public void shutdown() {
        log.info("Shut down " + getClass().getName());
        if (endpoint != null)
            endpoint.stop();
        endpoint = null;
    }

}
1 голос
/ 10 августа 2011

С клиента вы можете использовать вывод smbclient -L. На сервере может подойти сервлет .

...