GWT上传/下载最佳实践

GWT上传/下载最佳实践,gwt,rpc,Gwt,Rpc,因此,我是GWT新手,不确定我要做的事情的最佳编程实践是什么。在我的web应用程序中,用户将能够上传数据文件,我的应用程序需要能够访问该文件,对其执行一些操作,然后让用户下载被操纵的文件 到目前为止,我已经能够使用此doPost方法成功地使用上载servlet上载文件: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

因此,我是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);
    }
}
protectedvoiddopost(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
试一试{
DiskFileItemFactory fileItemFactory=新的DiskFileItemFactory();
ServletFileUpload fileUpload=新建ServletFileUpload(fileItemFactory);
fileUpload.setSizeMax(文件大小限制);
列表项=fileUpload.parseRequest(req);
用于(文件项:项){
if(item.isFormField()){
logger.log(Level.INFO,“接收表单字段:”);
logger.log(Level.INFO,“Name:+item.getFieldName());
logger.log(Level.INFO,“Value:+item.getString());
}否则{
logger.log(Level.INFO,“接收文件:”);
logger.log(Level.INFO,“Name:+item.getName());
logger.log(Level.INFO,“Size:+item.getSize());
}
如果(!item.isFormField()){
if(item.getSize()>文件大小限制){
响应发送错误(HttpServletResponse.SC_请求_实体_太大,“文件大小超出限制”);
返回;
}
字符串文件名=item.getName();
如果(文件名!=null){
fileName=FilenameUtils.getName(fileName);
}
fileName=getServletContext().getRealPath(“/uploadedFiles/”+fileName);
字节[]数据=项。获取();
FileOutputStream fileOutSt=新的FileOutputStream(文件名);
FileOutt.write(数据);
fileoutt.close();
如果(!item.isInMemory())
项目.删除();
}
}
}捕获(例外e){
logger.log(Level.severy,“为未处理的异常引发servlet异常”,e);
抛出新的ServletException(e);
}
}
当我查看war文件夹时,已成功创建uploadedFiles文件夹,并将文件放在那里


在这一点上,我有点卡住了,我一直在研究,但似乎找不到一个清晰简洁的答案,关于什么是最好的方式,让我访问客户端上传的文件,以便操纵它们,然后允许用户下载它们。也许我在处理这个问题上错了,我不确定。如果有人能给我指出正确的方向,或者给我展示一些正确方法的好例子,那就太好了,谢谢。

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

客户端应根据文件类型通过
锚定
图像
请求文件,但需添加参数,以便服务器能够识别文件。通常,您可以使用用于上载的
FileInput
的名称,也可以从服务器返回标记


我建议您尝试一下,这样会为您节省很多时间。

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

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

然后以我认为合适的方式操作它。

我已经使用moxiegroup gwt uploader获得了上传,但是,现在文件已经上传,我需要从中提取信息,以便在客户端使用。在客户端访问上传文件的最佳方法是什么我从未使用过moxiegroup的库,但是使用gwt upload library,uploader对象返回一个url来获取上传的文件
uploader.fileUrl()
。用户可以在下载之前编辑该文件???@您想要创建的文件是什么类型的?