我正在创建一个简单的项目,希望使用gwt上传和下载文件。但我在下载存储在服务器上的文件时遇到了问题。
对于文件上传,我使用了http://code.google.com/p/gwtupload/,并按照那里的说明进行操作。我的文件存储在网站容器之外的服务器上(硬盘上)。
现在,当涉及到文件的下载时,我希望用户按下下载按钮,当前选定的任何项都将被下载。但我不知道应该如何实现这一点。
我知道我需要一个下载servlet。
对于文件上传,我使用了http://code.google.com/p/gwtupload/,并按照那里的说明进行操作。我的文件存储在网站容器之外的服务器上(硬盘上)。
现在,当涉及到文件的下载时,我希望用户按下下载按钮,当前选定的任何项都将被下载。但我不知道应该如何实现这一点。
我知道我需要一个下载servlet。
public class DownloadAttachmentServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String fileName = (String) req.getSession().getAttribute("fileName");
YFUser user = (YFUser) req.getSession().getAttribute(TestServiceImpl.SESSION_USER);
if (user == null)
throw new ServletException("Invalid Session");
InputStream in = null;
OutputStream out = resp.getOutputStream();
FileInputStream fIn = new FileInputStream(fileName);
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0){
out.write(buffer, 0, length);
}
in.close();
out.flush();
}
}
目前我将只传递文件名字符串以检索文件进行测试。
现在我在客户端不知道该怎么做,我有一个简单的
public class DownloadFilePanel extends Composite {
public DownloadFilePanel(final YFUser user , final String fileName){
final Element downloadIframe = RootPanel.get("__download").getElement();
VerticalPanel content = new VerticalPanel();
content.add(new Label("Download For this File : " + fileName));
Button button = new Button("Download");
button.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
// i do not know what to do here
});
content.add(button);
initWidget(content);
}
}
上面是一个简单的小部件,它将提供一个面板,根据文件名允许下载文件。
正如您在上面所看到的,我不知道该怎么做才能下载文件。
有没有人可以指点我正确的方向?
href
属性中即可。此外,文件名可以作为URL参数传递,例如?filename=abcd.txt&otherParam=otherValue
。在您的servlet中,您可以通过调用request.getParameter("filename")
来获取文件名。 - Sripathi Krishnan