java - GWT 中的基本文件上传

标签 java google-app-engine gwt file-upload

我试图弄清楚如何使用 GWTs 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");

关于java - GWT 中的基本文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111130/

相关文章:

java - Vaadin 流自定义样式

javax.persistence.PersistenceException : org. hibernate.exception.SQLGrammarException:无法使用 heroku PostgreSQL 执行查询

google-app-engine - 谷歌应用引擎 : who is an admin?

java - GWT 应用程序和 LifeRay 门户之间的通信

java - GWT 远程过程调用 : Use same DB connection across multiple requests

java - 将列表中的值输入 sparql 查询

java - 使用 Scanner 在 Java 中读取日期

java - 在 appengine 中使用 twitter4j 的正确方法

android - GoogleJsonResponseException : 500 Internal Server Error

java - 访问 GWT 元素内的小部件