如何从JSF中的最终用户获取本地路径

时间:2011-11-05 15:39:57

标签: jsf web-applications jsf-1.2 picasa

我面临一个简单的问题 我想从我的Web应用程序的最终用户获取本地路径。我只需要那个而不是实际上传文件。 (我知道在seam或Primefaces中有 fileUpload 标签,但我只需要本地完整路径,因为我通过Google API直接上传到Picasa网络相册)

换句话说我想绑定某种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 个答案:

答案 0 :(得分:1)

出于安全原因,您无法获取本地路径,所有现代浏览器都不会为您的代码提供该信息...最好的情况是它们只为您提供文件名...

答案 1 :(得分:1)

  

但我只需要本地完整路径,因为我通过Google API直接上传到Picasa网络相册

您需要从JSF文件上传组件获取文件的内容为InputStream,并按照常规方式将其写入服务器本地磁盘文件系统上的FileOutputStream,然后您可以将其引用为Filepass it to the Picasa API as documented

另见: