当前位置: 首页 > 面试题库 >

Java 在GWT中上传基本文件

翟宾实
2023-03-14
问题内容

我试图弄清楚如何使用GWT的FileUpload小部件上传一个文件。我正在将GWT和Google AppEngine与Java一起使用,但是我想将文件上传到我自己的Linux服务器上。我已经有以下代码,但是现在我不知道如何将文件提交到Google AppServer服务器并将其保存到另一台服务器:

public class FileUploader{

    private ControlPanel cp;
    private FormPanel form = new FormPanel();
    private FileUpload fu =  new FileUpload();

    public FileUploader(ControlPanel cp) {
        this.cp = cp;
        this.cp.setPrimaryArea(getFileUploaderWidget());
    }

    @SuppressWarnings("deprecation")
    public Widget getFileUploaderWidget() {
        form.setEncoding(FormPanel.ENCODING_MULTIPART);
        form.setMethod(FormPanel.METHOD_POST);
        // form.setAction(/* WHAT SHOULD I PUT HERE */);

        VerticalPanel holder = new VerticalPanel();

        fu.setName("upload");
        holder.add(fu);
        holder.add(new Button("Submit", new ClickHandler() {
            public void onClick(ClickEvent event) {
                GWT.log("You selected: " + fu.getFilename(), null);
                form.submit();
            }
        }));

        form.addSubmitHandler(new FormPanel.SubmitHandler() {
            public void onSubmit(SubmitEvent event) {
                if (!"".equalsIgnoreCase(fu.getFilename())) {
                    GWT.log("UPLOADING FILE????", null);
                                        // NOW WHAT????
                }
                else{
                    event.cancel(); // cancel the event
                }

            }
        });

        form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
            public void onSubmitComplete(SubmitCompleteEvent event) {
                Window.alert(event.getResults());
            }
        });

        form.add(holder);

        return form;
    }
}

现在,我下一步需要做什么?我需要放入web.xml中的内容以及如何编写servlet,以便可以存储文件并返回该对象的url(如果可能)


问题答案:

这是我的应用程序中的代码:

1)我创建了一个接受HTTP请求的类:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileItemIterator; 
import org.apache.commons.fileupload.FileItemStream; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

public class FileUpload extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
        ServletFileUpload upload = new ServletFileUpload();

        try{
            FileItemIterator iter = upload.getItemIterator(request);

            while (iter.hasNext()) {
                FileItemStream item = iter.next();

                String name = item.getFieldName();
                InputStream stream = item.openStream();


                // Process the input stream
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                int len;
                byte[] buffer = new byte[8192];
                while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
                    out.write(buffer, 0, len);
                }

                int maxFileSize = 10*(1024*1024); //10 megs max 
                if (out.size() > maxFileSize) { 
                    throw new RuntimeException("File is > than " + maxFileSize);
                }
            }
        }
        catch(Exception e){
            throw new RuntimeException(e);
        }

    }
}

2)然后在我的web.xml中添加了以下几行:

<servlet>
    <servlet-name>fileUploaderServlet</servlet-name>
    <servlet-class>com.testapp.server.FileUpload</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>fileUploaderServlet</servlet-name>
  <url-pattern>/testapp/fileupload</url-pattern>
</servlet-mapping>

3)对于form.action这样做:

form.setAction(GWT.getModuleBaseURL()+"fileupload");


 类似资料:
  • 我试着在GXT中制作一个表单来上传文件,但我在网上看到了更多的例子,我没能用一个简单的FileUploadField将文件保存在本地 Cde片段: 上面的代码是FormPanel和FileUploadField的声明。

  • 本文向大家介绍基于Java中两种jersey文件上传方式,包括了基于Java中两种jersey文件上传方式的使用技巧和注意事项,需要的朋友参考一下 本文将带领大家使用基于JAX-RS REST风格的实现Jersey来上传文件到服务器制定的文件夹,如果是图片并读取显示出该图片。 准备工作:准备一个form表单,有两个字段,一个是type="file"和type="text",并且表单需要使用POST

  • 我是REST API的新手。我想上传用户选择的文件到用户提供的路径(远程或本地路径)使用REST API。我的html文件有一个文本框和一个文件选择器。用户将在文本框中输入文件路径(本地或远程计算机文件夹位置)。请建议如何解决这个问题。 下面是我的代码: 例外情况:

  • 我知道这是一个非常普遍的问题,但我无法在Angular 2中上传文件。我试过了 1) http://valor-software.com/ng2-file-upload/和 2) http://ng2-uploader.com/home ...但是失败了。有人用Angular上传过文件吗?你用了什么方法?如何做到这一点?如果提供任何示例代码或演示链接,我们将不胜感激。

  • 问题内容: 我正在使用FormPanel将文件上传到服务器。我要尝试做的是在上传文件之前,确保文件大小小于给定的大小(例如10MB)。在服务器端,我有一个javax.servlet.http.HttpServlet,在其中重写doPost。这里的HttpServletRequest参数具有文件的大小,但是问题是在文件已上传之前,我没有到达doPost。因此,如果我选择上传1 GB的文件,则在上传了

  • 我最近开始在AWS上工作。我目前正在开发S3存储的上传功能。 根据我的理解,有两种方法可以将文件上传到S3:- > 客户端的文件被上传到我的服务器上,我使用我的凭据将此文件上传到S3服务器。[我也可以对客户隐藏这一点,因为我不会显示上传详细信息。] 直接上传到S3 我能够使用简单的上传api实现第一种方法,但是我想跳过“将上传文件写入服务器磁盘”部分,直接将内容流式传输到S3存储,同时将上传详细信