Как получить локальный путь от конечного пользователя в JSF - PullRequest
0 голосов
/ 05 ноября 2011

Я столкнулся с простой проблемой Я хотел бы получить локальный путь от конечного пользователя моего веб-приложения. Мне нужно только это, а не загружать файл. (Я знаю, что в шве или в Primefaces есть fileUpload тегов, но мне просто нужен локальный полный путь, поскольку я загружаю напрямую в Веб-альбомы Picasa через Google API)

Другими словами, я хотел бы связать некоторый HTML-тег: input type = "file" к свойству bean-компонента (я заметил, что тег JSF h: inputText не имеет атрибута type ) Есть идеи?

Конверт: JBoss AS 5.1, JSF1.2, Seam 2.2, Primefaces 1.1

Редактировать: вот мое рабочее решение

Благодаря ответам я реализовал сценарий загрузки файла непосредственно в Picasa

    <h:form prependId="false" enctype="multipart/form-data">
        <s:fileUpload id="fileUpload"
                data="#{picasa.incomingFile}"
                contentType="#{picasa.fileType}"/>
        <h:inputText id="albumId"
                value="#{picasa.albumId}" />
        <h:commandLink action="#{picasa.upload()}"
                value="Upload">
            <f:param name="s"
                    value="#{subjectHome.id}"/>
        </h:commandLink>
    </h:form>

и код компонента

@Name("picasa")
public class PicasaService {

    @Logger private Log log;

    private PicasawebService service;
    private InputStream incomingFile;
    private String fileType;
    private String albumId;



    @Create
    public void setUp()
    {
        service = new PicasawebService("picasaService");
        try {
            service.setUserCredentials("xxx@yyyy.zzz", "password");
        } catch (AuthenticationException e) {
            e.printStackTrace();
        }
    }

    public void upload()
    {
        URL albumUrl;
        PhotoEntry returnedPhoto;
        try {
            albumUrl = new URL("https://picasaweb.google.com/data/feed/api/user/default/albumid/" + albumId);
            MediaStreamSource myMedia = new MediaStreamSource(incomingFile , this.fileType);
            returnedPhoto = service.insert(albumUrl, PhotoEntry.class, myMedia);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ServiceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Таким образом, мне кажется, что файл не передается дважды (по одному с компьютера конечного пользователя на сервер моего веб-приложения и оттуда на сервер Picasa WA).

Надеюсь, это поможет

Ответы [ 2 ]

1 голос
/ 05 ноября 2011

но мне просто нужен локальный полный путь, так как я загружаю напрямую в Веб-альбомы Picasa через Google API

Вам необходимо получить содержимое файлакак InputStream из компонента загрузки файлов JSF и записать его в FileOutputStream в файловой системе локального диска сервера обычным способом, затем вы можете ссылаться на него как File и передать его в API Picasaкак задокументировано .

См. также:

1 голос
/ 05 ноября 2011

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

...