0

所以我是 GWT 的新手,我不确定我想要做的最好的编程实践是什么。在我的 Web 应用程序中,用户将能够上传数据文件,我的应用程序需要能够访问该文件,对其执行一些操作,然后让用户下载处理过的文件。

到目前为止,我已经能够使用此 doPost 方法成功上传带有上传 servlet 的文件:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    try {
        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
        fileUpload.setSizeMax(FILE_SIZE_LIMIT);

        List<FileItem> items = fileUpload.parseRequest(req);

        for (FileItem item : items) {
            if (item.isFormField()) {
                logger.log(Level.INFO, "Received form field:");
                logger.log(Level.INFO, "Name: " + item.getFieldName());
                logger.log(Level.INFO, "Value: " + item.getString());
            } else {
                logger.log(Level.INFO, "Received file:");
                logger.log(Level.INFO, "Name: " + item.getName());
                logger.log(Level.INFO, "Size: " + item.getSize());
            }

            if (!item.isFormField()) {
                if (item.getSize() > FILE_SIZE_LIMIT) {
                    resp.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, "File size exceeds limit");

                    return;
                }
                String fileName = item.getName();
                if (fileName != null) {
                    fileName = FilenameUtils.getName(fileName);
                }
                fileName = getServletContext().getRealPath("/uploadedFiles/" + fileName);

                byte[] data = item.get();
                FileOutputStream fileOutSt = new FileOutputStream(fileName);
                fileOutSt.write(data);
                fileOutSt.close();

                if (!item.isInMemory())
                    item.delete();
            }
        }
    } catch (Exception e) {
        logger.log(Level.SEVERE, "Throwing servlet exception for unhandled exception", e);
        throw new ServletException(e);
    }
}

当我查看我的 war 文件夹时,uploadFiles 文件夹已成功创建并将文件放在那里。

在这一点上,我有点卡住了,我一直在研究,但似乎无法找到一个明确简洁的答案,说明什么是我在客户端访问上传文件以操作它们然后允许用户的最佳方式下载它们。也许我正在接近这个错误,我不确定。如果有人能指出我正确的方向或向我展示一些做事的正确方法的好例子,那就太好了,谢谢。

4

2 回答 2

0

要在客户端访问文件,您需要一个新的 servlet 或与doGet方法一起使用的相同。

Anchor客户端应根据文件类型通过 an或 an请求文件,Image但添加参数以便服务器能够识别文件。通常您可以使用FileInput您用于上传的名称,或者您可以从服务器返回一个标签。

我建议你尝试一下gwt-upload,它会为你节省很多时间。

于 2013-04-01T19:23:33.607 回答
0

我解决了我的问题。文件成功上传后,我存储了文件名。后来我使用了一个RPC来访问服务器上的文件。我将文件名传递给 RPC,以便它知道我正在处理的文件,然后它在上传文件夹中查找该文件。所以我可以像这样创建java文件,

File file = new File((this.getServletContext().getRealPath("uploadedFiles") + File.separator + fileName));

并以我认为合适的方式操纵它。

于 2013-07-11T19:20:00.533 回答