【发布时间】:2011-11-05 15:39:57
【问题描述】:
我面临一个简单的问题 我想从我的 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 服务器)。
希望对你有帮助
【问题讨论】:
标签: jsf web-applications jsf-1.2 picasa