GWT中的基本文件上传 [英] Basic File upload in GWT

查看:162
本文介绍了GWT中的基本文件上传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出如何使用GWT的FileUpload小部件上传一个文件。我正在使用GWT和谷歌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());

$ b $ @SuppressWarnings(deprecation)
public Widget getFileUploaderWidget(){
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
// form.setAction(/ *我应该放哪里* /)

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();
}
}));
$ b form.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event){
if(!。equalsIgnoreCase(fu.getFilename())) {
GWT.log(UPLOADING FILE ????,null);
//现在什么????
}
else {
事件。取消(); //取消事件
}

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

form.add(持有者);

退货表单;




$ b现在,接下来我需要做什么?我需要在web.xml中放置什么,以及如何编写我的servlet,这样我就可以存储文件并返回该对象的url(如果可能的话)

解决方案

这里是我的应用程序的代码:
$ b $ 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;
导入javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
$ b $ public class FileUpload extends HttpServlet {$ b $ public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
ServletFileUpload upload = new ServletFileUpload();

尝试{
FileItemIterator iter = upload.getItemIterator(request); (iter.hasNext()){
FileItemStream item = iter.next();



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


//处理输入流
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
byte [] buffer = new byte [8192]; ((len = stream.read(buffer,0,buffer.length))!= -1){
out.write(buffer,0,len);
}

int maxFileSize = 10 *(1024 * 1024);如果(out.size()> maxFileSize){
throw new RuntimeException(File is> than+ maxFileSize);


$ b catch(Exception e){
throw new RuntimeException(e);



$ b code
$ b 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做到了这一点:$ b​​
$ b

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


I'm trying to figure out how to upload one file using GWTs FileUpload widget. I'm using GWT and Google AppEngine with Java but I would like to upload file to my own Linux server. I have the following code already but now I can't figure out how to submit my file to the Google AppServer server and save it to another server:

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;
    }
}

Now, what do I need to do next? What do i need to put in web.xml and how do I write my servlet so i can store file and return url of that object (if possible)

解决方案

Here's the code from my app:

1) I created a class to accept http request:

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) Then in my web.xml I've added these lines:

<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) And for form.action did this:

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

这篇关于GWT中的基本文件上传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆